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).