fsync, fdatasync - синхронизирует состояние файла в памяти с состоянием на диске
НАЗВАНИЕfsync, fdatasync - синхронизирует состояние файла в памяти
с состоянием на диске
СИНТАКСИС
#include
int fsync(int fd);
int fdatasync(int fd);
ОПИСАНИЕ
fsync копирует все части файла, находящиеся в памяти, на
устройство (диск) и ждет, пока устройство не доложит о
том, что все части нормально сохранены. Также обновляется
информация о состоянии метаданных. Нет необходимости
убеждаться в том, что элемент каталога, содержащего файл,
достиг диска. Для этого необходимо выполнить fsync на
описатель файла для каталога. fdatasync делает то-же, что
и fsync, но сбрасывает из памяти только данные
пользователя, а не метаданные (напр. mtime или atime).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успешного завершения возвращается нулевое
значение. При ошибке возвращается -1, и переменная errno
устанавливается должным образом.
КОДЫ ОШИБОК
EBADF fd неверный описатель файла, например, открытый для
записи.
EROFS, EINVAL
fd связан со специальным файлом, который не
поддерживает синхронизацию.
EIO Во время синхронизации произошла ошибка.
ЗАМЕЧАНИЯ
В случае, если на жестком диске включено кэширование при
записи, данных фактически может не быть на диске, хотя
fsync/fdatasync уже сообщит об их записи на диск и
завершит работу.
Когда файловоая система типа ext2 смонтирована с
параметром sync, то все элементы каталогов также
синхронизируются по fsync.
В ядрах до версии 2.4 использование fsync для больших
файлах неэффективно. Альтернативой может быть
использование флага O_SYNC для open(2).
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1b (ранее POSIX.4)