Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Стандартная библиотека языка C (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
              Считать  недействительными  другие отображения того же файла (для того, чтобы они могли обновиться
              до достоверных значений, которые запишутся).

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

       При успешном выполнении возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.

ОШИБКИ

       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, стр. 128–129 и 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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                         msync(2)