Синхронизировать память с физическим хранилищем
#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
- выполнить синхронную запись. Функция не возвращается до тех пор, пока запись всех операций не завершится, как ожидается при обеспечении целостности синхронно записываемых данных.
 | Вы можете указать только один из двух флагов: MS_ASYNC или MS_SYNC . |
libc
Функция msync() производит запись всех модифицированных данных в постоянное хранилище, если на этих страницах памяти имеется любая часть адресного пространства процесса, начинающегося с адреса addr и длиной до len байт. Функция msync() также применяется для мапированных в память файлов.
Если такого хранилища нет, функция msync() не произведет никакого эффекта. При необходимости функция msync() аннулирует кэшированные копии данных.
При мапировании файлов, функция гарантирует, что все операции записи завершатся так, как это делается в случае подтвержднеия целостности синхронизированно записываемых данных.
 | Мапирование файлов реализовано не во всех файловых системах. |
При вызове функции 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 системной библиотеки