diff options
Diffstat (limited to 'lib/libc/sys/shm_open.2')
| -rw-r--r-- | lib/libc/sys/shm_open.2 | 473 |
1 files changed, 0 insertions, 473 deletions
diff --git a/lib/libc/sys/shm_open.2 b/lib/libc/sys/shm_open.2 deleted file mode 100644 index 4c03288b6bbe..000000000000 --- a/lib/libc/sys/shm_open.2 +++ /dev/null @@ -1,473 +0,0 @@ -.\" -.\" Copyright 2000 Massachusetts Institute of Technology -.\" -.\" Permission to use, copy, modify, and distribute this software and -.\" its documentation for any purpose and without fee is hereby -.\" granted, provided that both the above copyright notice and this -.\" permission notice appear in all copies, that both the above -.\" copyright notice and this permission notice appear in all -.\" supporting documentation, and that the name of M.I.T. not be used -.\" in advertising or publicity pertaining to distribution of the -.\" software without specific, written prior permission. M.I.T. makes -.\" no representations about the suitability of this software for any -.\" purpose. It is provided "as is" without express or implied -.\" warranty. -.\" -.\" THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS -.\" ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE, -.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT -.\" SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd June 25, 2021 -.Dt SHM_OPEN 2 -.Os -.Sh NAME -.Nm memfd_create , shm_open , shm_rename, shm_unlink -.Nd "shared memory object operations" -.Sh LIBRARY -.Lb libc -.Sh SYNOPSIS -.In sys/types.h -.In sys/mman.h -.In fcntl.h -.Ft int -.Fn memfd_create "const char *name" "unsigned int flags" -.Ft int -.Fn shm_open "const char *path" "int flags" "mode_t mode" -.Ft int -.Fn shm_rename "const char *path_from" "const char *path_to" "int flags" -.Ft int -.Fn shm_unlink "const char *path" -.Sh DESCRIPTION -The -.Fn shm_open -system call opens (or optionally creates) a -POSIX -shared memory object named -.Fa path . -The -.Fa flags -argument contains a subset of the flags used by -.Xr open 2 . -An access mode of either -.Dv O_RDONLY -or -.Dv O_RDWR -must be included in -.Fa flags . -The optional flags -.Dv O_CREAT , -.Dv O_EXCL , -and -.Dv O_TRUNC -may also be specified. -.Pp -If -.Dv O_CREAT -is specified, -then a new shared memory object named -.Fa path -will be created if it does not exist. -In this case, -the shared memory object is created with mode -.Fa mode -subject to the process' umask value. -If both the -.Dv O_CREAT -and -.Dv O_EXCL -flags are specified and a shared memory object named -.Fa path -already exists, -then -.Fn shm_open -will fail with -.Er EEXIST . -.Pp -Newly created objects start off with a size of zero. -If an existing shared memory object is opened with -.Dv O_RDWR -and the -.Dv O_TRUNC -flag is specified, -then the shared memory object will be truncated to a size of zero. -The size of the object can be adjusted via -.Xr ftruncate 2 -and queried via -.Xr fstat 2 . -.Pp -The new descriptor is set to close during -.Xr execve 2 -system calls; -see -.Xr close 2 -and -.Xr fcntl 2 . -.Pp -As a -.Fx -extension, the constant -.Dv SHM_ANON -may be used for the -.Fa path -argument to -.Fn shm_open . -In this case, an anonymous, unnamed shared memory object is created. -Since the object has no name, -it cannot be removed via a subsequent call to -.Fn shm_unlink , -or moved with a call to -.Fn shm_rename . -Instead, -the shared memory object will be garbage collected when the last reference to -the shared memory object is removed. -The shared memory object may be shared with other processes by sharing the -file descriptor via -.Xr fork 2 -or -.Xr sendmsg 2 . -Attempting to open an anonymous shared memory object with -.Dv O_RDONLY -will fail with -.Er EINVAL . -All other flags are ignored. -.Pp -The -.Fn shm_rename -system call atomically removes a shared memory object named -.Fa path_from -and relinks it at -.Fa path_to . -If another object is already linked at -.Fa path_to , -that object will be unlinked, unless one of the following flags are provided: -.Bl -tag -offset indent -width Er -.It Er SHM_RENAME_EXCHANGE -Atomically exchange the shms at -.Fa path_from -and -.Fa path_to . -.It Er SHM_RENAME_NOREPLACE -Return an error if an shm exists at -.Fa path_to , -rather than unlinking it. -.El -.Fn shm_rename -is also a -.Fx -extension. -.Pp -The -.Fn shm_unlink -system call removes a shared memory object named -.Fa path . -.Pp -The -.Fn memfd_create -function creates an anonymous shared memory object, identical to that created -by -.Fn shm_open -when -.Dv SHM_ANON -is specified. -Newly created objects start off with a size of zero. -The size of the new object must be adjusted via -.Xr ftruncate 2 . -.Pp -The -.Fa name -argument must not be -.Dv NULL , -but it may be an empty string. -The length of the -.Fa name -argument may not exceed -.Dv NAME_MAX -minus six characters for the prefix -.Dq memfd: , -which will be prepended. -The -.Fa name -argument is intended solely for debugging purposes and will never be used by the -kernel to identify a memfd. -Names are therefore not required to be unique. -.Pp -The following -.Fa flags -may be specified to -.Fn memfd_create : -.Bl -tag -width MFD_ALLOW_SEALING -.It Dv MFD_CLOEXEC -Set -.Dv FD_CLOEXEC -on the resulting file descriptor. -.It Dv MFD_ALLOW_SEALING -Allow adding seals to the resulting file descriptor using the -.Dv F_ADD_SEALS -.Xr fcntl 2 -command. -.It Dv MFD_HUGETLB -This flag is currently unsupported. -.El -.Sh RETURN VALUES -If successful, -.Fn memfd_create -and -.Fn shm_open -both return a non-negative integer, -and -.Fn shm_rename -and -.Fn shm_unlink -return zero. -All functions return -1 on failure, and set -.Va errno -to indicate the error. -.Sh COMPATIBILITY -The -.Fa path , -.Fa path_from , -and -.Fa path_to -arguments do not necessarily represent a pathname (although they do in -most other implementations). -Two processes opening the same -.Fa path -are guaranteed to access the same shared memory object if and only if -.Fa path -begins with a slash -.Pq Ql \&/ -character. -.Pp -Only the -.Dv O_RDONLY , -.Dv O_RDWR , -.Dv O_CREAT , -.Dv O_EXCL , -and -.Dv O_TRUNC -flags may be used in portable programs. -.Pp -POSIX -specifications state that the result of using -.Xr open 2 , -.Xr read 2 , -or -.Xr write 2 -on a shared memory object, or on the descriptor returned by -.Fn shm_open , -is undefined. -However, the -.Fx -kernel implementation explicitly includes support for -.Xr read 2 -and -.Xr write 2 . -.Pp -.Fx -also supports zero-copy transmission of data from shared memory -objects with -.Xr sendfile 2 . -.Pp -Neither shared memory objects nor their contents persist across reboots. -.Pp -Writes do not extend shared memory objects, so -.Xr ftruncate 2 -must be called before any data can be written. -See -.Sx EXAMPLES . -.Sh EXAMPLES -This example fails without the call to -.Xr ftruncate 2 : -.Bd -literal -compact - - uint8_t buffer[getpagesize()]; - ssize_t len; - int fd; - - fd = shm_open(SHM_ANON, O_RDWR | O_CREAT, 0600); - if (fd < 0) - err(EX_OSERR, "%s: shm_open", __func__); - if (ftruncate(fd, getpagesize()) < 0) - err(EX_IOERR, "%s: ftruncate", __func__); - len = pwrite(fd, buffer, getpagesize(), 0); - if (len < 0) - err(EX_IOERR, "%s: pwrite", __func__); - if (len != getpagesize()) - errx(EX_IOERR, "%s: pwrite length mismatch", __func__); -.Ed -.Sh ERRORS -.Fn memfd_create -fails with these error codes for these conditions: -.Bl -tag -width Er -.It Bq Er EBADF -The -.Fa name -argument was NULL. -.It Bq Er EINVAL -The -.Fa name -argument was too long. -.Pp -An invalid or unsupported flag was included in -.Fa flags . -.It Bq Er EMFILE -The process has already reached its limit for open file descriptors. -.It Bq Er ENFILE -The system file table is full. -.It Bq Er ENOSYS -In -.Fa memfd_create , -.Dv MFD_HUGETLB -was specified in -.Fa flags , -and this system does not support forced hugetlb mappings. -.El -.Pp -.Fn shm_open -fails with these error codes for these conditions: -.Bl -tag -width Er -.It Bq Er EINVAL -A flag other than -.Dv O_RDONLY , -.Dv O_RDWR , -.Dv O_CREAT , -.Dv O_EXCL , -or -.Dv O_TRUNC -was included in -.Fa flags . -.It Bq Er EMFILE -The process has already reached its limit for open file descriptors. -.It Bq Er ENFILE -The system file table is full. -.It Bq Er EINVAL -.Dv O_RDONLY -was specified while creating an anonymous shared memory object via -.Dv SHM_ANON . -.It Bq Er EFAULT -The -.Fa path -argument points outside the process' allocated address space. -.It Bq Er ENAMETOOLONG -The entire pathname exceeds 1023 characters. -.It Bq Er EINVAL -The -.Fa path -does not begin with a slash -.Pq Ql \&/ -character. -.It Bq Er ENOENT -.Dv O_CREAT -is not specified and the named shared memory object does not exist. -.It Bq Er EEXIST -.Dv O_CREAT -and -.Dv O_EXCL -are specified and the named shared memory object does exist. -.It Bq Er EACCES -The required permissions (for reading or reading and writing) are denied. -.El -.Pp -The following errors are defined for -.Fn shm_rename : -.Bl -tag -width Er -.It Bq Er EFAULT -The -.Fa path_from -or -.Fa path_to -argument points outside the process' allocated address space. -.It Bq Er ENAMETOOLONG -The entire pathname exceeds 1023 characters. -.It Bq Er ENOENT -The shared memory object at -.Fa path_from -does not exist. -.It Bq Er EACCES -The required permissions are denied. -.It Bq Er EEXIST -An shm exists at -.Fa path_to , -and the -.Dv SHM_RENAME_NOREPLACE -flag was provided. -.El -.Pp -.Fn shm_unlink -fails with these error codes for these conditions: -.Bl -tag -width Er -.It Bq Er EFAULT -The -.Fa path -argument points outside the process' allocated address space. -.It Bq Er ENAMETOOLONG -The entire pathname exceeds 1023 characters. -.It Bq Er ENOENT -The named shared memory object does not exist. -.It Bq Er EACCES -The required permissions are denied. -.Fn shm_unlink -requires write permission to the shared memory object. -.El -.Sh SEE ALSO -.Xr posixshmcontrol 1 , -.Xr close 2 , -.Xr fstat 2 , -.Xr ftruncate 2 , -.Xr mmap 2 , -.Xr munmap 2 , -.Xr sendfile 2 -.Sh STANDARDS -The -.Fn memfd_create -function is expected to be compatible with the Linux system call of the same -name. -.Pp -The -.Fn shm_open -and -.Fn shm_unlink -functions are believed to conform to -.St -p1003.1b-93 . -.Sh HISTORY -The -.Fn memfd_create -function appeared in -.Fx 13.0 . -.Pp -The -.Fn shm_open -and -.Fn shm_unlink -functions first appeared in -.Fx 4.3 . -The functions were reimplemented as system calls using shared memory objects -directly rather than files in -.Fx 8.0 . -.Pp -.Fn shm_rename -first appeared in -.Fx 13.0 -as a -.Fx -extension. -.Sh AUTHORS -.An Garrett A. Wollman Aq Mt wollman@FreeBSD.org -(C library support and this manual page) -.Pp -.An Matthew Dillon Aq Mt dillon@FreeBSD.org -.Pq Dv MAP_NOSYNC -.Pp -.An Matthew Bryan Aq Mt matthew.bryan@isilon.com -.Pq Dv shm_rename implementation |
