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 и st_mtime помечаются для обновления.

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

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

Коды ошибок:

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

Примеры:

См. mmap().

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

POSIX 1003.1 Memory Mapped Files, Synchronous Input/Output

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

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

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

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

mmap(), sysconf()




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