FSYNC(2)

ИМЯ
fsync - синхронизирует состояние файла в памяти с состоянием на диске

ОБЗОР
#include <unistd.h>

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)

СМОТРИ ТАКЖЕ
bdflush(2), open(2), sync(2), update(8), sync(8) +. mount(8),

ПЕРЕВОД
Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2003