msync()

Синхронизировать память с физическим хранилищем

Прототип:

#include <sys/mman.h>
int msync( void *addr,
size_t len,
int flags );

Аргументы:

Аргументы:

addr
Начало диапазона адресов, который будет синхронизирован.
len
Длина диапазона адресов в байтах.
flags
Побитное включение одного или нескольких из следующих флагов:
MS_ASYNC
Выполнять асинхронные записи. Функция возвращает значение сразу после того, как все записи инициированы или поставлены в очередь для обслуживания.
MS_CACHE_ONLY (расширение ЗОСРВ «Нейтрино»)
Neutrino поддерживает стандартные POSIX-совместимые смаппированные в память файлы, msync() выполняет запланированную операцию записи изменений обратно в маппированную память основного файла. Этот бит указывается для выполнения расширения ЗОСРВ «Нейтрино» для функции сброса или аннулирования кэша данных (совместо с флагами MS_ASYNC, MS_SYNC или MS_INVALIDATE) вместо поведения по стандарту POSIX.
MS_INVALIDATE
аннулирует кэшированные данные. Аннулирует все несовместимые с постоянными хранилищами кэшированные копии смаппированных данных, так что последующие обращения получают данные, совместимые с постоянным хранилищем между вызовом msync() и первой последующей ссылкой на данные в памяти.
MS_INVALIDATE_ICACHE (расширение ЗОСРВ «Нейтрино»)
при динамической модификации сегмента кода приложения флаг позволяет быть уверенным в том, что новый сегмент кода будет выполнен.
MS_SYNC
выполнить синхронную запись. Функция не возвращается до тех пор, пока запись всех операций не завершится, как ожидается при обеспечении целостности синхронно записываемых данных.


Caution: Вы можете указать только один из двух флагов: MS_ASYNC или MS_SYNC.

Библиотека:

libc

Описание:

Функция msync() производит запись всех модифицированных данных в постоянное хранилище, если на этих страницах памяти имеется любая часть адресного пространства процесса, начинающегося с адреса addr и длиной до len байтов. Функция msync() также применяется для маппированных в память файлов.

Если такого хранилища нет, функция msync() не произведет никакого эффекта. При необходимости функция msync() аннулирует кэшированные копии данных.

При маппировании файлов, функция гарантирует, что все операции записи завершатся так, как это делается в случае подтвержднеия целостности синхронизированно записываемых данных.


Caution: Маппирование файлов реализовано не во всех файловых системах.

При вызове функции msync() для MAP_PRIVATE маппирования, любые модифицированные данные не записываются в исходный объект. Такие данные не видны для остальных процессов.

Поведение msync() не определено, если не было установлено маппирование посредством вызова mmap().

Если msync() вызывает любую запись в файл, тогда поля файла st_ctime and st_mtime помечаются для обновления.

Возвращаемое значение:

0
Завершено успешно
-1
Произошла ошибка (устанавливается errno).

Коды ошибок:

EBUSY
Некоторые или все адреса в диапазоне, начинающиеся с addr и продолжающиеся до len байт, заблокированы и указан MS_INVALIDATE.
EINTR
Вызов был прерван сигналом.
EINVAL
Неверное значение flags.
ENOMEM
Адреса в диапазоне, начинающимся с addr и продолжающимся до len байт, находятся за пределами допустимого диапазона адресного пространства процесса или указаны одна или несколько сраниц, котрые не были смаппированы.

Примеры:

См. mmap().

Классификация:

POSIX 1003.1 MF SIO

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

MS_INVALIDATE_ICACHE и MS_CACHE_ONLY - расширения ЗОСРВ «Нейтрино».

Тематические ссылки:

mmap(), sysconf()




Предыдущий раздел: Описание API системной библиотеки