Provided by: manpages-posix-dev_2017a-2_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 shall be allocated as  described
       in Section 2.14, File Descriptor Allocation 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‐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.   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 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

       Section  2.14,  File  Descriptor  Allocation,  close(),  dup(),  exec,  fcntl(),  fstat(),
       ftruncate(), mmap(), msync(), posix_mem_offset(), posix_typed_mem_get_info(), umask()

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

COPYRIGHT

       Portions  of  this  text  are  reprinted  and  reproduced in electronic form from IEEE Std
       1003.1-2017, Standard for Information Technology -- Portable  Operating  System  Interface
       (POSIX),  The  Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by
       the Institute of Electrical and Electronics Engineers, Inc and The  Open  Group.   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.opengroup.org/unix/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 .