NAME
posix_typed_mem_open —
open a typed memory object (ADVANCED REALTIME)
SYNOPSIS
[TYM]
#include <sys/mman.h>
int posix_typed_mem_open(const char *name, int oflag, int tflag);
DESCRIPTION
The posix_typed_mem_open () function shall
establish a connection between the typed memory object specified by the
string pointed to by name and a file descriptor. It shall
create an open file description that refers to the typed memory object and a
file descriptor that refers to that open file description. The file
descriptor shall be allocated as described in V2_chap02(3)
and can be used by other functions to refer to that typed memory object. It
is unspecified whether the name appears in the file system and is visible to
other functions that take pathnames as arguments. The name
argument conforms to the construction rules for a pathname, except that the
interpretation of <slash> characters other than the leading
<slash> character in name is implementation-defined,
and that the length limits for the name argument are
implementation-defined and need not be the same as the pathname limits
{PATH_MAX} and {NAME_MAX}. If name begins with the
<slash> character, then processes calling
posix_typed_mem_open () with the same value of
name shall refer to the same typed memory object. If
name does not begin with the <slash> character, the
effect is implementation-defined.
Each typed memory object supported in a system shall be identified by a name which specifies not only its associated typed memory pool, but also the path or port by which it is accessed. That is, the same typed memory pool accessed via several different ports shall have several different corresponding names. The binding between names and typed memory objects is established in an implementation-defined manner. Unlike shared memory objects, there is no way within POSIX.1-2024 for a program to create a typed memory object.
The value of tflag shall determine how the typed memory object behaves when subsequently mapped by calls to mmap(3). At most, one of the following flags defined in <sys/mman.h> may be specified:
- POSIX_TYPED_MEM_ALLOCATE
- Allocate on mmap () .
- POSIX_TYPED_MEM_ALLOCATE_CONTIG
- Allocate contiguously on mmap () .
- POSIX_TYPED_MEM_MAP_ALLOCATABLE
- Map on mmap () , without affecting allocatability.
If tflag has the flag POSIX_TYPED_MEM_ALLOCATE specified, any subsequent call to mmap(3) using the returned file descriptor shall result in allocation and mapping of typed memory from the specified typed memory pool. The allocated memory may be a contiguous previously unallocated area of the typed memory pool or several non-contiguous previously unallocated areas (mapped to a contiguous portion of the process address space). If tflag has the flag POSIX_TYPED_MEM_ALLOCATE_CONTIG specified, any subsequent call to mmap(3) using the returned file descriptor shall result in allocation and mapping of a single contiguous previously unallocated area of the typed memory pool (also mapped to a contiguous portion of the process address space). If tflag has none of the flags POSIX_TYPED_MEM_ALLOCATE or POSIX_TYPED_MEM_ALLOCATE_CONTIG specified, any subsequent call to mmap(3) using the returned file descriptor shall map an application-chosen area from the specified typed memory pool such that this mapped area becomes unavailable for allocation until unmapped by all processes. If tflag has the flag POSIX_TYPED_MEM_MAP_ALLOCATABLE specified, any subsequent call to mmap(3) using the returned file descriptor shall map an application-chosen area from the specified typed memory pool without an effect on the availability of that area for allocation; that is, mapping such an object leaves each byte of the mapped area unallocated if it was unallocated prior to the mapping or allocated if it was allocated prior to the mapping. Appropriate privileges to specify the POSIX_TYPED_MEM_MAP_ALLOCATABLE flag are implementation-defined.
If successful, posix_typed_mem_open ()
shall return a file descriptor for the typed memory object. The open file
description is new, and therefore the file descriptor shall not share it
with any other processes. It is unspecified whether the file offset is set.
The FD_CLOEXEC file descriptor flag associated with the new file descriptor
shall be cleared unless oflag includes O_CLOEXEC. The
FD_CLOFORK file descriptor flag associated with the new file descriptor
shall be cleared unless oflag includes O_CLOFORK.
The behavior of msync(3), ftruncate(3), and all file operations other than mmap(3), posix_mem_offset(3), posix_typed_mem_get_info(3), fstat(3), dup(3), dup2(3), dup3(3), and close(3), is unspecified when passed a file descriptor connected to a typed memory object by this function.
The file status flags of the open file description shall be set according to the value of oflag. Applications shall specify exactly one of the three access mode values described below as the value of oflag.
- O_RDONLY
- Open for read access only.
- O_WRONLY
- Open for write access only.
- O_RDWR
- Open for read or write access.
Additionally, the value of oflag can include the following flags:
RETURN VALUE
Upon successful completion, the
posix_typed_mem_open () function shall return a
non-negative integer representing the file descriptor. Otherwise, it shall
return -1 and set
errno to
indicate the error.
ERRORS
The posix_typed_mem_open () function shall
fail if:
- [EACCES]
- The typed memory object exists and the permissions specified by oflag are denied.
- [EINTR]
- The
posix_typed_mem_open() operation was interrupted by a signal. - [EINVAL]
- The flags specified in tflag are invalid (more than one of POSIX_TYPED_MEM_ALLOCATE, POSIX_TYPED_MEM_ALLOCATE_CONTIG, or POSIX_TYPED_MEM_MAP_ALLOCATABLE is specified).
- [EMFILE]
- All file descriptors available to the process are currently open.
- [ENFILE]
- Too many file descriptors are currently open in the system.
- [ENOENT]
- The named typed memory object does not exist.
- [EPERM]
- The caller lacks appropriate privileges to specify the POSIX_TYPED_MEM_MAP_ALLOCATABLE flag in the tflag argument.
The posix_typed_mem_open () function may
fail if:
- [ENAMETOOLONG]
- The length of the name argument exceeds {_POSIX_PATH_MAX} on systems that do not support the XSI option [XSI] or exceeds {_XOPEN_PATH_MAX} on XSI systems, or has a pathname component that is longer than {_POSIX_NAME_MAX} on systems that do not support the XSI option [XSI] or longer than {_XOPEN_NAME_MAX} on XSI systems.
EXAMPLES
None.
APPLICATION USAGE
None.
RATIONALE
The use of the O_CLOEXEC and O_CLOFORK flags to
posix_typed_mem_open () is necessary to avoid
leaking typed memory file descriptors to child processes, since
fcntl(3) has unspecified results on typed memory objects
and therefore cannot be used to set FD_CLOEXEC or FD_CLOFORK after the file
descriptor has been opened. The
exec
family of functions already unmaps all memory associated with a typed memory
object, but does not close the file descriptor unless FD_CLOEXEC is also
set.
FUTURE DIRECTIONS
None.
SEE ALSO
V2_chap02(3), close(3), dup(3), exec(3), fcntl(3), fstat(3), ftruncate(3), mmap(3), msync(3), posix_mem_offset(3), posix_typed_mem_get_info(3), umask(3)
XBD <fcntl.h>, <sys/mman.h>
CHANGE HISTORY
First released in Issue 6. Derived from IEEE Std 1003.1j-2000.
Issue 7
Austin Group Interpretation 1003.1-2001 #143 is applied.
POSIX.1-2008, Technical Corrigendum 1, XSH/TC1-2008/0442 [119,428] is applied.
POSIX.1-2008, Technical Corrigendum 2, XSH/TC2-2008/0256 [835], XSH/TC2-2008/0257 [835], and XSH/TC2-2008/0258 [835] are applied.
Issue 8
Austin Group Defects 411 and 1318 are applied, adding O_CLOEXEC, O_CLOFORK, and dup3(3).
Austin Group Defect 593 is applied, removing a reference to <fcntl.h> from the DESCRIPTION section.