Главная » 2017 » Ноябрь » 21 » man 2 msync
01:01
man 2 msync

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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



ОБЗОР


#include <sys/mman.h>

int msync(void *addr, 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.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() без этих флагов, используя семантику,
B.O. Gallmeister, POSIX.4, O'Reilly, страницы 128–129 и 389–391.



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 26 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar