Provided by: manpages-posix-dev_2013a-1_all bug

PROLOG

       This  manual  page  is part of the POSIX Programmer's Manual.  The Linux implementation of
       this interface may differ (consult the corresponding Linux  manual  page  for  details  of
       Linux behavior), or the interface may not be implemented on Linux.

NAME

       posix_typed_mem_open — open a typed memory object (ADVANCED REALTIME)

SYNOPSIS

       #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 is 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‐2008 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().  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()
       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()  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()  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() 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 that is the lowest numbered file descriptor not currently open  for  that  process.
       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.

       The  behavior  of  msync(),  ftruncate(),  and  all  file  operations  other  than mmap(),
       posix_mem_offset(), posix_typed_mem_get_info(), fstat(), dup(), dup2(),  and  close(),  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 and defined in the <fcntl.h> header, 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.

RETURN VALUE

       Upon successful completion,  the  posix_typed_mem_open()  function  shall  return  a  non-
       negative  integer  representing  the lowest numbered unused 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 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 or longer than {_XOPEN_NAME_MAX} on XSI systems.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       None.

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       close(), dup(), exec, fcntl(), fstat(), ftruncate(), mmap(), msync(),  posix_mem_offset(),
       posix_typed_mem_get_info(), umask()

       The Base Definitions volume of POSIX.1‐2008, <fcntl.h>, <sys_mman.h>

COPYRIGHT

       Portions  of  this  text  are  reprinted  and  reproduced in electronic form from IEEE Std
       1003.1, 2013 Edition, Standard for Information Technology  --  Portable  Operating  System
       Interface  (POSIX),  The Open Group Base Specifications Issue 7, Copyright (C) 2013 by the
       Institute of Electrical and Electronics Engineers, Inc  and  The  Open  Group.   (This  is
       POSIX.1-2008  with  the  2013  Technical  Corrigendum  1  applied.)  In  the  event of any
       discrepancy between this version and the original IEEE and The Open  Group  Standard,  the
       original  IEEE  and The Open Group Standard is the referee document. The original Standard
       can be obtained online at http://www.unix.org/online.html .

       Any typographical or formatting errors that appear in this page are most  likely  to  have
       been  introduced  during  the conversion of the source files to man page format. To report
       such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html .