Provided by: manpages-ru-dev_4.23.1-1_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, в flags должен быть указан или MS_SYNC, или MS_ASYNC и отказ включить один из этих флагов
       вызывает ошибку в msync() на некоторых системах. Однако Linux позволяет вызывать msync() без этих флагов,
       используя  семантику, которая (в настоящее время) эквивалентна указанию MS_ASYNC (начиная с Linux 2.6.19,
       MS_ASYNC, фактически, ничего не делает, так как ядро правильно отслеживает грязные страницы и  записывает
       их  в  место  хранения при необходимости). Несмотря на поведение Linux, в переносимых, ориентированных на
       будущее приложениях в flags должен быть указан или MS_SYNC, или MS_ASYNC.

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001.

       Этот вызов появился в Linux 1.3.21, и в нём использовалось EFAULT вместо ENOMEM. В Linux 2.4.19 это  было
       изменено на значение POSIX ENOMEM.

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

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

       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 (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.

Linux man-pages 6.8                               2 мая 2024 г.                                         msync(2)