|
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
|
|
Как происходит синхронизация при записи в файл?21.04.2013, 10:14. Показов 2348. Ответов 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 и щелчку по записи происходит задержка Не происходит вход пользователя в ИБ по учетной записи при смене пароля Почему происходит округление при записи вещественных данных в таблицу? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|