Provided by: manpages-ru-dev_4.19.0-7_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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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