> Linux Reviews > man >

fsync


  1. fsync.2.man


1. fsync.2.man

Manpage of FSYNC

FSYNC

Section: Руководство программиста Linux (2)
Updated: 2008-11-07
Index Return to Main Contents
 

ИМЯ

fsync, fdatasync - синхронизирует состояние файла в памяти с состоянием на устройстве хранения  

ОБЗОР

#include <unistd.h>

int fsync(int fd);

int fdatasync(int fd);

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

fsync(): _BSD_SOURCE || _XOPEN_SOURCE

         || /* начиная с glibc 2.8: */ _POSIX_C_SOURCE >= 200112L
fdatasync(): _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >=500  

ОПИСАНИЕ

Вызов fsync() пересылает ("сбрасывает") все изменённые в памяти (in-core) данные (т.е., изменённые страницы буферного кэша) файла, на который указывает файловый дескриптор fd, на дисковое устройство (или другое устройство постоянного хранения), где расположен файл. Вызов блокируется до тех пор, пока устройство не сообщит, что пересылка завершена. Он также сбрасывает информацию о метаданных, связанную с файлом (см. stat(2)).

Вызов fsync() необязательно приводит к тому, что элемент каталога, содержащий файл, также будет сброшен на диск. Для этого нужно явно выполнить fsync() для файлового дескриптора каталога.

Вызов fdatasync() подобен fsync(), но не записывает изменившиеся метаданные, если эти метаданные не нужны для последующего получения данных. Например, изменения st_atime или st_mtime (время последнего доступа и последнего изменения, соответственно; см. stat(2)) не нужно записывать, так как они ненужны для чтения самих данных. С другой стороны, при изменении размера файла (st_size, изменяется, например, ftruncate(2)) запись метаданных будет нужна.

Целью создания fdatasync() является сокращение обменов с диском для приложений, которым не нужна синхронизация метаданных с диском.  

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

В случае успеха данные системные вызовы возвращают ноль. Если произошла ошибка возвращается -1 и errno устанавливается должным образом.  

ОШИБКИ

EBADF
Значение fd не является правильным файловым дескриптором, открытым для записи.
EIO
Во время синхронизации произошла ошибка.
EROFS, EINVAL
fd связан со специальным файлом, который не поддерживает синхронизацию.
 

СООТВЕТСТВИЕ СТАНДАРТАМ

4.3BSD, POSIX.1-2001.  

ДОСТУПНОСТЬ

В системах POSIX, в которых есть fdatasync(), в <unistd.h> определено значение для _POSIX_SYNCHRONIZED_IO и оно больше 0 (см. также sysconf(3)).  

ЗАМЕЧАНИЯ

Приложения, которые обращаются к базам данных или журнальным файлам, часто записывают короткие фрагменты данных (например, одну строку в файл журнала) и затем сразу вызывают fsync(), чтобы данные гарантированно записались на физический носитель. К сожалению, вызов fsync() всегда выполняет две операции: одну для сохранения новых данных и другую для обновления времени изменения, которое хранится в inode. Если время изменения файла не важно для работы программы, то можно использовать fdatasync() для избежания ненужных операций записи в inode.

В случае, если у жёсткого диска включено кэширование записи, данные могут фактически не быть сохранены на носитель после возврата из fsync()/fdatasync().

Когда файловая система ext2 монтируется с параметром sync, при вызове fsync() также неявно синхронизируются записи каталогов.

В ядрах до версии 2.4, использование fsync() на больших файлах может оказаться неэффективным. В качестве альтернативы можно использовать флаг O_SYNC в вызове open(2).

В Linux 2.2 и ранее, вызов fdatasync() эквивалентен fsync(), и поэтому не даёт преимуществ в производительности.  

СМОТРИТЕ ТАКЖЕ

bdflush(2), open(2), sync(2), sync_file_range(2), hdparm(8), mount(8), sync(8), update(8)


 

Index

ИМЯ
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СООТВЕТСТВИЕ СТАНДАРТАМ
ДОСТУПНОСТЬ
ЗАМЕЧАНИЯ
СМОТРИТЕ ТАКЖЕ

This document was created by man2html using the manual pages.
Time: 17:41:18 GMT, October 23, 2013

SVENSKA - SVENSKA - SVENSKA - SVENSKA - ja - nl - pl