SYNC(2)

ИМЯ
sync, syncfs - записывает буферный кэш на диск

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

void sync(void);

int syncfs(int fd);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

sync():
    _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

syncfs():
    _GNU_SOURCE

ОПИСАНИЕ
Вызов sync() приводит к записи в файловую систему всех изменений данных и метаданных файла, хранящихся в буфере. Вызов syncfs() подобен sync(), но синхронизирует только файловую систему, содержащую файл, на который указывает открытый файловый дескриптор fd.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При нормальном завершении работы syncfs() возвращает 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ
Вызов sync() всегда выполняется без ошибок. Вызов syncfs() может завершиться с ошибкой, по крайней мере, по следующей причине:

EBADF
    Значение fd не является правильным файловым дескриптором.

ВЕРСИИ
Системный вызов syncfs() впервые появился в Linux 2.6.39; поддержка в glibc добавлена в версии 2.14.

СООТВЕТСТВИЕ СТАНДАРТАМ
sync(): POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. syncfs() есть только в Linux.

ЗАМЕЧАНИЯ
Начиная с glibc 2.2.2 Linux-прототип sync() стал соответствовать различным стандартам. В glibc 2.21 и старее он объявлялся как «int sync(void)» и вызов sync() всегда возвращал 0.

ДЕФЕКТЫ
В соответствии со стандартной спецификацией (например POSIX.1-2001), sync() только планирует запись, и может закончить работу до того как запись будет на самом деле произведена. Однако в Linux, начиная с версии 1.3.20, выполняется ожидание завершения записи (это всё равно не гарантирует целостность данных: современные диски оснащаются большими кэшами).

СМОТРИТЕ ТАКЖЕ
bdflush(2), fdatasync(2), fsync(2), sync(1)