Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       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
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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

Linux man-pages 6.03                            5 февраля 2023 г.                                       msync(2)