Открытие объекта в типизированной памяти
#include <sys/mman.h>int posix_typed_mem_open( const char *name,int oflag,int tflag );
libc
Функция posix_typed_mem_open() устанавливает связь между типизированным объектом памяти, указанным в name, и файловым дескриптором. Он создает описание открытого файла, которое ссылается на типизированный объект памяти, и дескриптор файла, который ссылается на описание открытого файла.
Имена типизированных областей памяти получаются непосредственно из имен сегментов asinfo. Сам раздел asinfo описывает иерархию, поэтому именование типизированного объекта памяти является иерархией.
Функция posix_typed_mem_open() принимает имена следующим образом:
/
, устанавливает связь с помощью точного совпадения.
/
. Они считаются разделителями компонентов пути. Если указано несколько компонентов пути, они сопоставляются снизу вверх (противоположно тому, как записываются имена).
/
, для указанных компонентов пути устанавливается связь путем нахождения совпадений в конце имени. Дескриптор файла используется другими функциями для ссылки на этот типизированный объект памяти.
Установка tflag влияет на то, что происходит, когда вы вызываете mmap() с файловым дескриптором для типизированного объекта памяти:
Отображенная область памяти недоступна для выделения, пока все процессы не отключат ее. |
Если tflag равен 0
или POSIX_TYPED_MEM_MAP_ALLOCATABLE
, параметр смещения для mmap() указывает начальный физический адрес в типизированной области памяти; если типизированная область памяти является несмежной (несколько записей asinfo), допустимые значения смещения также являются несмежными и не начинаются с нуля, как для объектов с общей памятью. Если указана область [paddr, paddr + size), которая выходит за пределы разрешенных адресов для типизированного объекта памяти, mmap() завершается ошибкой с ENXIO
.
Параметр oflag определяет, с какими разрешениями вам разрешено использовать mmap(). Например, если oflag равен O_RDONLY
, вы не можете выполнить mmap() с MAP_SHARED
и PROT_WRITE
.
В случае успеха posix_typed_mem_open() возвращает дескриптор файла для типизированного объекта памяти, который является файловым дескриптором с наименьшим номером, не открытым в данный момент для этого процесса. Дескриптор открытого файла является новым и не используется никакими другими процессами. Флаг дескриптора файла FD_CLOEXEC
, связанный с новым дескриптором файла, очищается.
Функции mmap(), posix_mem_offset(), posix_typed_mem_get_info(), fstat(), dup(), dup2() и close() могут работать с дескриптором файла, который возвращает posix_typed_mem_open().
Расширения ЗОСРВ «Нейтрино»:
ENOSYS
Неотрицательное целое, представляющее неиспользуемый файловый дескриптор с минимальным номером. Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
PATH_MAX
, или компонент пути name длиннее, чем NAME_MAX
. POSIX_TYPED_MEM_MAP_ALLOCATABLE
в аргументе tflag. POSIX 1003.1 Typed Memory Objects
close(), dup(), dup2(), fstat(), ftruncate(), mmap(), msync(), posix_mem_offset(), posix_typed_mem_get_info()
Предыдущий раздел: Описание API системной библиотеки