коммит пишет

Я программирую win32, используя fopen fread fwrite на C.

Как я могу заставить Windows записывать данные на диск? Является ли это вызовом API для этого?

У меня есть программа, которая должна обязательно убедиться, что данные сохранены на диск, прежде чем они будут сохранены в другой файл индексации, иначе в случае сбоев индексный файл может иногда обновляться, но другой файл не вызывает плохого несоответствия.


person Community    schedule 25.02.2009    source источник


Ответы (5)


fflush() делает то, что вы хотите. Если вы решите использовать Win32 API для выполнения файлового ввода-вывода вместо библиотеки C STDIO, укажите флаг FILE_FLAG_WRITE_THROUGH для функции CreateFile(), которая делает именно то, что вам нужно.

person Crashworks    schedule 25.02.2009

Используйте функцию fflush после каждого fwrite

person kokeksibir    schedule 25.02.2009

См. функцию _commit. Также на другой странице MSDN. Это работает только с _open и другими функциями, поэтому см. эту статью — вы можете связать свою программу с commode.obj чтобы заставить fflush зафиксировать диск.

person wj32    schedule 25.02.2009
comment
Я до сих пор хихикаю, когда вижу это имя файла объекта. - person Crashworks; 25.02.2009

Помните, что какую бы функцию вы ни использовали, это не спасет вас от отключения электроэнергии или полной перезагрузки. Жесткие диски работают умно и могут сообщить, что запись завершена, даже если они только что поместили данные в кэш и фактически не записывали их на поверхность.

person sharptooth    schedule 25.02.2009

См. эту архивную статью базы знаний.

Когда вы впервые открываете файл с помощью fopen, включите параметр режима «c» в качестве ПОСЛЕДНЕГО ВАРИАНТА:

fopen( path, "wc") // w - write mode, c - allow immediate commit to disk

Затем, когда вы хотите принудительно сбросить на диск, вызовите

_flushall()

Мы сделали этот звонок до звонка

fclose()

Проблема записи, не сохраняемой на диск, вызывала у нас настоящие проблемы, пока мы не обнаружили этот метод.

С указанного выше сайта:

"В Microsoft C/C++ версии 7.0 появился параметр режима "c" для функции fopen(). Когда приложение открывает файл и указывает режим "c", библиотека времени выполнения записывает содержимое файлового буфера. на диск, когда приложение вызывает функцию fflush() или _flushall(). "

person Artie Leech    schedule 18.07.2019