ИМЯ

msync - синхронизирует содержимое файла с его отображением в памяти

LIBRARY

Standard C library ( libc, -lc)

СИНТАКСИС

#include <sys/mman.h>
int msync(void addr[.length], size_t length, int flags);

ОПИСАНИЕ

Вызов msync() сбрасывает изменения файла, который отображён в память с помощью mmap(2), обратно в файловую систему. Без использования этого вызова нет никакой гарантии, что изменения будут записаны в файл до вызова munmap(2). Если быть точнее, то на диск записывается часть файла, начинающаяся в памяти с адреса addr длиной length.
В аргументе flags должен быть один из флагов MS_ASYNC и MS_SYNC, а также дополнительно можно указать MS_INVALIDATE. Данные биты имеют следующее значение:
MS_ASYNC
Запланировать обновление, но вызов завершается сразу.
MS_SYNC
Запланировать обновление и ждать его завершения.
MS_INVALIDATE
Считать недействительными другие отображения того же файла (для того, чтобы они могли обновиться до достоверных значений, которые запишутся).

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

On success, zero is returned. On error, -1 is returned, and errno is set to indicate the error.

ОШИБКИ

EBUSY
В flags указан MS_INVALIDATE, но на указанный адресный диапазон есть блокировка в памяти.
EINVAL
Значение addr не кратно PAGESIZE; в flags установлен любой другой бит, отличный от MS_ASYNC | MS_INVALIDATE | MS_SYNC; в flags установлены сразу MS_SYNC и MS_ASYNC.
ENOMEM
Указанная память (или её часть) не была отображена.

СТАНДАРТЫ

POSIX.1-2001, POSIX.1-2008.
Этот вызов появился в Linux 1.3.21, и в нём использовалось EFAULT вместо ENOMEM. В Linux 2.4.19 это было изменено на значение POSIX ENOMEM.
В системах POSIX, в которых доступен msync(), значения _POSIX_MAPPED_FILES и _POSIX_SYNCHRONIZED_IO, определённые в <unistd.h>, больше нуля. (См. также sysconf(3).)

ЗАМЕЧАНИЯ

Согласно POSIX, в flags должен быть указан или MS_SYNC, или MS_ASYNC и отказ включить один из этих флагов вызывает ошибку в msync() на некоторых системах. Однако Linux позволяет вызывать msync() без этих флагов, используя семантику, которая (в настоящее время) эквивалентна указанию MS_ASYNC (начиная с Linux 2.6.19, MS_ASYNC, фактически, ничего не делает, так как ядро правильно отслеживает грязные страницы и записывает их в место хранения при необходимости). Несмотря на поведение Linux, в переносимых, ориентированных на будущее приложениях в flags должен быть указан или MS_SYNC, или MS_ASYNC.

СМ. ТАКЖЕ

mmap(2)
B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128–129 and 389–391.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан aereiae <[email protected]>, Alexey <[email protected]>, Azamat Hackimov <[email protected]>, Dmitriy S. Seregin <[email protected]>, Dmitry Bolkhovskikh <[email protected]>, ITriskTI <[email protected]>, Max Is <[email protected]>, Yuri Kozlov <[email protected]>, Иван Павлов <[email protected]> и Малянов Евгений Викторович <[email protected]>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]

Recommended readings

Pages related to msync you should read also: