msync(2)

ИМЯ
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 <aereiae@gmail.com>, Alexey <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Малянов Евгений Викторович <maljanow@outlook.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 (https://www.gnu.org/licenses/gpl-3.0.html) или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.