|
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
|
|
Как происходит синхронизация при записи в файл?21.04.2013, 10:14. Показов 2362. Ответов 5
Метки нет (Все метки)
начало
Меня тоже вопрос мучал, но однажды (когда "потерял" курсовую) я смирился. Вопрос вот в чем. После исчезания окна копирования/перемщения, в тот момент когда вроде бы "уже все записано", фактически записаны далеко не все данные. Они зависают на пути к устройству в ?системном? кеше, где ожидают своей очереди. И ожидать они там могут достаточно долго - несколько секунд. В случае же отмонтирования устройства, выполняется очистка буфеорв и кешей устройства. При этом данной задаче выдается повышенный приоритет(?), для скорейшего выполнения. Вопрос, почему же данные висят в памяти в течении секунд меня тоже мучал, ведь, это же флешка. Скорость записи порядка нескольких мегабайт, но даже при копировании маленьких файлов можно этот файл потерять.. Во время записи больших файлов таки указывается скорость записи, значит сбор кешей периодически выполняется (наверно тут дейстует ограничение на размер кеша для одного процесса.потока.устройства?) Иначе скорость записи может оказаться заоблочной (если хватит оперативной памяти). Так почему же при окончании копирования файлов не вызывается очистка кеша устройства? это напрягает. Ведь всех на первом курсе учили вызывать метод flush перед закрытием дескриптора файла/потока? Так почему? почему при "закрытии" файла, завершении приложения (или это только поток? - наврядли) данные все так же лежат в кеше??? _____________________________ Не по теме: могу ошибаться в некоторых моментах
0
|
|
| 21.04.2013, 10:14 | |
|
Ответы с готовыми решениями:
5
При записи в бинарный файл происходит segmentation fault При бинарной записи в файл целых чисел вместо них происходит запись каких-то символов |
|
deleted
177 / 50 / 5
Регистрация: 29.03.2013
Сообщений: 365
|
||||||||||||||||||||||||||
| 21.04.2013, 17:38 | ||||||||||||||||||||||||||
|
Когда вызывается sys_write, ядро пишет в страничный кэш и помечает соответствующие страницы как "грязные". Такие страницы копируются на диск если: Если нет свободной памяти, но высрать её откуда то надо. /proc/sys/vm/min_free_kbytes /proc/sys/vm/dirty_background_bytes Если страница была грязной дольше чем /proc/sys/vm/dirty_expire_centisecs сотых секунд, то при следуещем пробуждении синхронизирующих потоков, она будет копирована на диск. Если пользователь сделал системный вызов типа sync, umount... /proc/sys/vm/drop_caches этого кстати не делает После копирования на устройство они разумеется остаются и в страничном кэше. И могут "зависать" там ооооочень долго 2)ограничения на размер кеша для процесса нет. Кеш привязан к данным, а не процессам, запрашивающим эти данные. Чему лежать в кеше решает LRU/n алгоритм, в линуксе n=2, то есть ключевую роль играет время последнего доступа. Есть ограничение на объём грязных страниц процесса, который производит записи /proc/sys/vm/durty_bytes
А если fflush поставить так
1
|
||||||||||||||||||||||||||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||
| 22.04.2013, 06:28 | |||
|
0
|
|||
|
deleted
177 / 50 / 5
Регистрация: 29.03.2013
Сообщений: 365
|
||||
| 22.04.2013, 08:45 | ||||
|
0
|
||||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
| 22.04.2013, 10:26 | ||||||
|
я думал, его выделяет fopen() (вообще, от реализации зависит, когда он выделяется) код не редактировался вообще fflush() ты вставлял только во втором примере вот из этой фразы следует
0
|
||||||
|
deleted
177 / 50 / 5
Регистрация: 29.03.2013
Сообщений: 365
|
|
| 22.04.2013, 18:43 | |
|
ну ладно тогда
0
|
|
| 22.04.2013, 18:43 | |
|
Помогаю со студенческими работами здесь
6
Как перенести строку при записи в файл при использовании BufferedWriter? При запуске gdm и щелчку по записи происходит задержка Не происходит вход пользователя в ИБ по учетной записи при смене пароля Почему происходит округление при записи вещественных данных в таблицу? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|