ИМЯ¶
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