+++ /dev/null
-.\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993
-.\" and Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
-.\" and Copyright 2004, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" %%%LICENSE_START(VERBATIM)
-.\" Permission is granted to make and distribute verbatim copies of this
-.\" manual provided the copyright notice and this permission notice are
-.\" preserved on all copies.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\"
-.\" Since the Linux kernel and libraries are constantly changing, this
-.\" manual page may be incorrect or out-of-date. The author(s) assume no
-.\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein. The author(s) may not
-.\" have taken the same level of care in the production of this manual,
-.\" which is licensed free of charge, as they might when working
-.\" professionally.
-.\"
-.\" Formatted or processed versions of this manual, if unaccompanied by
-.\" the source, must acknowledge the copyright and authors of this work.
-.\" %%%LICENSE_END
-.\"
-.\" Modified 1993-07-28, Rik Faith <faith@cs.unc.edu>
-.\" Modified 1993-11-28, Giorgio Ciucci <giorgio@crcc.it>
-.\" Modified 1997-01-31, Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-02-18, Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2002-01-05, 2004-05-27, 2004-06-17,
-.\" Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2004-10-11, aeb
-.\" Modified, Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Updated shmid_ds structure definitions
-.\" Added information on SHM_DEST and SHM_LOCKED flags
-.\" Noted that CAP_IPC_LOCK is not required for SHM_UNLOCK
-.\" since kernel 2.6.9
-.\" Modified, 2004-11-25, mtk, notes on 2.6.9 RLIMIT_MEMLOCK changes
-.\" 2005-04-25, mtk -- noted aberrant Linux behavior w.r.t. new
-.\" attaches to a segment that has already been marked for deletion.
-.\" 2005-08-02, mtk: Added IPC_INFO, SHM_INFO, SHM_STAT descriptions.
-.\"
-.TH SHMCTL 2 2014-02-07 "Linux" "Linux Programmer's Manual"
-.SH NAME
-shmctl \- System V shared memory control
-.SH SYNOPSIS
-.ad l
-.B #include <sys/ipc.h>
-.br
-.B #include <sys/shm.h>
-.sp
-.BI "int shmctl(int " shmid ", int " cmd ", struct shmid_ds *" buf );
-.ad b
-.SH DESCRIPTION
-.BR shmctl ()
-performs the control operation specified by
-.I cmd
-on the System\ V shared memory segment whose identifier is given in
-.IR shmid .
-.PP
-The
-.I buf
-argument is a pointer to a \fIshmid_ds\fP structure,
-defined in \fI<sys/shm.h>\fP as follows:
-.PP
-.in +4n
-.nf
-struct shmid_ds {
- struct ipc_perm shm_perm; /* Ownership and permissions */
- size_t shm_segsz; /* Size of segment (bytes) */
- time_t shm_atime; /* Last attach time */
- time_t shm_dtime; /* Last detach time */
- time_t shm_ctime; /* Last change time */
- pid_t shm_cpid; /* PID of creator */
- pid_t shm_lpid; /* PID of last shmat(2)/shmdt(2) */
- shmatt_t shm_nattch; /* No. of current attaches */
- ...
-};
-.fi
-.in
-.PP
-The
-.I ipc_perm
-structure is defined as follows
-(the highlighted fields are settable using
-.BR IPC_SET ):
-.PP
-.in +4n
-.nf
-struct ipc_perm {
- key_t __key; /* Key supplied to shmget(2) */
- uid_t \fBuid\fP; /* Effective UID of owner */
- gid_t \fBgid\fP; /* Effective GID of owner */
- uid_t cuid; /* Effective UID of creator */
- gid_t cgid; /* Effective GID of creator */
- unsigned short \fBmode\fP; /* \fBPermissions\fP + SHM_DEST and
- SHM_LOCKED flags */
- unsigned short __seq; /* Sequence number */
-};
-.fi
-.in
-.PP
-Valid values for
-.I cmd
-are:
-.br
-.TP 10
-.B IPC_STAT
-Copy information from the kernel data structure associated with
-.I shmid
-into the
-.I shmid_ds
-structure pointed to by \fIbuf\fP.
-The caller must have read permission on the
-shared memory segment.
-.TP
-.B IPC_SET
-Write the values of some members of the
-.I shmid_ds
-structure pointed to by
-.I buf
-to the kernel data structure associated with this shared memory segment,
-updating also its
-.I shm_ctime
-member.
-The following fields can be changed:
-\fIshm_perm.uid\fP, \fIshm_perm.gid\fP,
-and (the least significant 9 bits of) \fIshm_perm.mode\fP.
-The effective UID of the calling process must match the owner
-.RI ( shm_perm.uid )
-or creator
-.RI ( shm_perm.cuid )
-of the shared memory segment, or the caller must be privileged.
-.TP
-.B IPC_RMID
-Mark the segment to be destroyed.
-The segment will actually be destroyed
-only after the last process detaches it (i.e., when the
-.I shm_nattch
-member of the associated structure
-.I shmid_ds
-is zero).
-The caller must be the owner or creator of the segment, or be privileged.
-The
-.I buf
-argument is ignored.
-.IP
-If a segment has been marked for destruction, then the (nonstandard)
-.B SHM_DEST
-flag of the
-.I shm_perm.mode
-field in the associated data structure retrieved by
-.B IPC_STAT
-will be set.
-.IP
-The caller \fImust\fP ensure that a segment is eventually destroyed;
-otherwise its pages that were faulted in will remain in memory or swap.
-.IP
-See also the description of
-.I /proc/sys/kernel/shm_rmid_forced
-in
-.BR proc (5).
-.TP 10
-.BR IPC_INFO " (Linux-specific)"
-Return information about system-wide shared memory limits and
-parameters in the structure pointed to by
-.IR buf .
-This structure is of type
-.I shminfo
-(thus, a cast is required),
-defined in
-.I <sys/shm.h>
-if the
-.B _GNU_SOURCE
-feature test macro is defined:
-.nf
-.in +4n
-
-struct shminfo {
- unsigned long shmmax; /* Maximum segment size */
- unsigned long shmmin; /* Minimum segment size;
- always 1 */
- unsigned long shmmni; /* Maximum number of segments */
- unsigned long shmseg; /* Maximum number of segments
- that a process can attach;
- unused within kernel */
- unsigned long shmall; /* Maximum number of pages of
- shared memory, system-wide */
-};
-
-.in
-.fi
-The
-.IR shmmni ,
-.IR shmmax ,
-and
-.I shmall
-settings can be changed via
-.I /proc
-files of the same name; see
-.BR proc (5)
-for details.
-.TP
-.BR SHM_INFO " (Linux-specific)"
-Return a
-.I shm_info
-structure whose fields contain information
-about system resources consumed by shared memory.
-This structure is defined in
-.I <sys/shm.h>
-if the
-.B _GNU_SOURCE
-feature test macro is defined:
-.nf
-.in +4n
-
-struct shm_info {
- int used_ids; /* # of currently existing
- segments */
- unsigned long shm_tot; /* Total number of shared
- memory pages */
- unsigned long shm_rss; /* # of resident shared
- memory pages */
- unsigned long shm_swp; /* # of swapped shared
- memory pages */
- unsigned long swap_attempts;
- /* Unused since Linux 2.4 */
- unsigned long swap_successes;
- /* Unused since Linux 2.4 */
-};
-.in
-.fi
-.TP
-.BR SHM_STAT " (Linux-specific)"
-Return a
-.I shmid_ds
-structure as for
-.BR IPC_STAT .
-However, the
-.I shmid
-argument is not a segment identifier, but instead an index into
-the kernel's internal array that maintains information about
-all shared memory segments on the system.
-.PP
-The caller can prevent or allow swapping of a shared
-memory segment with the following \fIcmd\fP values:
-.br
-.TP 10
-.BR SHM_LOCK " (Linux-specific)"
-Prevent swapping of the shared memory segment.
-The caller must fault in
-any pages that are required to be present after locking is enabled.
-If a segment has been locked, then the (nonstandard)
-.B SHM_LOCKED
-flag of the
-.I shm_perm.mode
-field in the associated data structure retrieved by
-.B IPC_STAT
-will be set.
-.TP
-.BR SHM_UNLOCK " (Linux-specific)"
-Unlock the segment, allowing it to be swapped out.
-.PP
-In kernels before 2.6.10, only a privileged process
-could employ
-.B SHM_LOCK
-and
-.BR SHM_UNLOCK .
-Since kernel 2.6.10, an unprivileged process can employ these operations
-if its effective UID matches the owner or creator UID of the segment, and
-(for
-.BR SHM_LOCK )
-the amount of memory to be locked falls within the
-.B RLIMIT_MEMLOCK
-resource limit (see
-.BR setrlimit (2)).
-.\" There was some weirdness in 2.6.9: SHM_LOCK and SHM_UNLOCK could
-.\" be applied to a segment, regardless of ownership of the segment.
-.\" This was a botch-up in the move to RLIMIT_MEMLOCK, and was fixed
-.\" in 2.6.10. MTK, May 2005
-.SH RETURN VALUE
-A successful
-.B IPC_INFO
-or
-.B SHM_INFO
-operation returns the index of the highest used entry in the
-kernel's internal array recording information about all
-shared memory segments.
-(This information can be used with repeated
-.B SHM_STAT
-operations to obtain information about all shared memory segments
-on the system.)
-A successful
-.B SHM_STAT
-operation returns the identifier of the shared memory segment
-whose index was given in
-.IR shmid .
-Other operations return 0 on success.
-
-On error, \-1 is returned, and
-.I errno
-is set appropriately.
-.SH ERRORS
-.TP
-.B EACCES
-\fBIPC_STAT\fP or \fBSHM_STAT\fP is requested and
-\fIshm_perm.mode\fP does not allow read access for
-.IR shmid ,
-and the calling process does not have the
-.B CAP_IPC_OWNER
-capability.
-.TP
-.B EFAULT
-The argument
-.I cmd
-has value
-.B IPC_SET
-or
-.B IPC_STAT
-but the address pointed to by
-.I buf
-isn't accessible.
-.TP
-.B EIDRM
-\fIshmid\fP points to a removed identifier.
-.TP
-.B EINVAL
-\fIshmid\fP is not a valid identifier, or \fIcmd\fP
-is not a valid command.
-Or: for a
-.B SHM_STAT
-operation, the index value specified in
-.I shmid
-referred to an array slot that is currently unused.
-.TP
-.B ENOMEM
-(In kernels since 2.6.9),
-.B SHM_LOCK
-was specified and the size of the to-be-locked segment would mean
-that the total bytes in locked shared memory segments would exceed
-the limit for the real user ID of the calling process.
-This limit is defined by the
-.B RLIMIT_MEMLOCK
-soft resource limit (see
-.BR setrlimit (2)).
-.TP
-.B EOVERFLOW
-\fBIPC_STAT\fP is attempted, and the GID or UID value
-is too large to be stored in the structure pointed to by
-.IR buf .
-.TP
-.B EPERM
-\fBIPC_SET\fP or \fBIPC_RMID\fP is attempted, and the
-effective user ID of the calling process is not that of the creator
-(found in
-.IR shm_perm.cuid ),
-or the owner
-(found in
-.IR shm_perm.uid ),
-and the process was not privileged (Linux: did not have the
-.B CAP_SYS_ADMIN
-capability).
-
-Or (in kernels before 2.6.9),
-.B SHM_LOCK
-or
-.B SHM_UNLOCK
-was specified, but the process was not privileged
-(Linux: did not have the
-.B CAP_IPC_LOCK
-capability).
-(Since Linux 2.6.9, this error can also occur if the
-.B RLIMIT_MEMLOCK
-is 0 and the caller is not privileged.)
-.SH CONFORMING TO
-SVr4, POSIX.1-2001.
-.\" SVr4 documents additional error conditions EINVAL,
-.\" ENOENT, ENOSPC, ENOMEM, EEXIST. Neither SVr4 nor SVID documents
-.\" an EIDRM error condition.
-.SH NOTES
-The inclusion of
-.I <sys/types.h>
-and
-.I <sys/ipc.h>
-isn't required on Linux or by any version of POSIX.
-However,
-some old implementations required the inclusion of these header files,
-and the SVID also documented their inclusion.
-Applications intended to be portable to such old systems may need
-to include these header files.
-.\" Like Linux, the FreeBSD man pages still document
-.\" the inclusion of these header files.
-
-The
-.BR IPC_INFO ,
-.B SHM_STAT
-and
-.B SHM_INFO
-operations are used by the
-.BR ipcs (1)
-program to provide information on allocated resources.
-In the future, these may modified or moved to a
-.I /proc
-filesystem interface.
-
-Linux permits a process to attach
-.RB ( shmat (2))
-a shared memory segment that has already been marked for deletion
-using
-.IR shmctl(IPC_RMID) .
-This feature is not available on other UNIX implementations;
-portable applications should avoid relying on it.
-
-Various fields in a \fIstruct shmid_ds\fP were typed as
-.I short
-under Linux 2.2
-and have become
-.I long
-under Linux 2.4.
-To take advantage of this,
-a recompilation under glibc-2.1.91 or later should suffice.
-(The kernel distinguishes old and new calls by an
-.B IPC_64
-flag in
-.IR cmd .)
-.SH SEE ALSO
-.BR mlock (2),
-.BR setrlimit (2),
-.BR shmget (2),
-.BR shmop (2),
-.BR capabilities (7),
-.BR svipc (7)
-.SH COLOPHON
-This page is part of release 3.79 of the Linux
-.I man-pages
-project.
-A description of the project,
-information about reporting bugs,
-and the latest version of this page,
-can be found at
-\%http://www.kernel.org/doc/man\-pages/.