ИМЯ
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 [AT] perm.ru> 2003