НАЗВАНИЕ
fdatasync − синхронизирует содержимое файла в памяти с содержимым на диске
ОБЗОР
#include <unistd.h>
int fdatasync(int fd);
ОПИСАНИЕ
fdatasync записывает на диск содержимое всех буферов данных, связанных с файлом, причем возврат из функции происходит только после того, как это было сделано. Этот системный вызов напоминает fsync, но от него не требуется обновлять метаданные, например, время доступа.
Приложения, которые работают с базами данных или журнальными файлами, часто пишут небольшие фрагменты данных (например, строчку журнала за строчкой), а затем вызывают fsync, чтобы убедиться, что записанные данные сохранены на жестком диске. К сожалению, fsync всегда приводит к двум операциям записи: одной для новых данных, и еще одной для того, чтобы обновить информацию, хранящуюся в inode. Если время модификации файла неважно для программы, то можно использовать fdatasync, чтобы избежать ненужной операции записи inode.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха возвращается ноль. При ошибке возвращается −1, а errno устанавливается должным образом.
ОШИБКИ
EBADF |
fd не является правильным дескриптором файла, открытым для записи. |
EROFS, EINVAL
fd связан со специальным файлом, не поддерживающим синхронизацию.
EIO |
Во время синхронизации произошла ошибка. |
ОШИБКИ
В настоящий момент (Linux 2.2) fdatasync эквивалентен fsync.
ДОСТУПНОСТЬ
На POSIX системах, где вызов fdatasync недоступен, символ _POSIX_SYNCHRONIZED_IO , определяемый в <unistd.h> устанавливается в значение больше 0. (См. также sysconf(3).)
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX1b (ранее известный как POSIX.4)
СМОТРИ ТАКЖЕ
fsync(2), B.O. Gallmeister, POSIX.4, O’Reilly, сс. 220-223 и 343.
ПЕРЕВОД
Copyright (C) Alexey Mahotkin <alexm [AT] hsys.ru> 1999, Виктор Вислобоков <corochoone [AT] perm.ru> 2003