Кеширование

Jul 20, 2012 06:41


К счастью, данные в кэше жесткого диска должны фиксироваться на диске незамедлительно.
В Linux также предусмотрен системный вызов fdatasyncO:
finclude


int fdatasync (int fd);
Этот системный вызов делает то же самое, что и fsyncO, но он ограничивается
сбросом только данных. Вызов не гарантирует, что метаданные также синхронизируются
с диском, и поэтому работает потенциально быстрее. Зачастую
этого бывает достаточно.
Обе функции применяются одинаково и очень просто:
int ret:
ret = fsync (fd):
i f (ret == -1)
/* ошибка */
Ни одна из функций не гарантирует, что обновленные записи каталога, содержащего
файл, синхронизируются с диском. Это подразумевает, что если
ссылка на файл только что обновлена, то данные файла уже могут быть успешно
записаны на диск, но еще не связаны с записью каталога, что делает файл недоступным.
Чтобы гарантировать, что все обновления в записях каталога также
фиксируются на диске, необходимо вызывать fsyncO для дескриптора файла,
открытого для самого каталога.

Previous post Next post
Up