shmctl(2) System Calls Manual shmctl(2) shmctl - System V (libc -lc) #include int shmctl(int shmid, int op, struct shmid_ds *buf); shmctl() op System V shmid. buf shmid_ds : 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; /* Creation time/time of last modification via shmctl() */ pid_t shm_cpid; /* PID of creator */ pid_t shm_lpid; /* PID of last shmat(2)/shmdt(2) */ shmatt_t shm_nattch; /* # of current attaches */ ... }; shmid_ds : shm_perm ipc_perm ( ) . shm_segsz . shm_atime shmat(2) . shm_dtime shmdt(2) . shm_ctime shmctl() IPC_SET. shm_cpid . shm_lpid shmat(2) shmdt(2) . shm_nattch . ipc_perm ( IPC_SET): struct ipc_perm { key_t __key; /* Key supplied to shmget(2) */ uid_t uid; /* Effective UID of owner */ gid_t gid; /* Effective GID of owner */ uid_t cuid; /* Effective UID of creator */ gid_t cgid; /* Effective GID of creator */ unsigned short mode; /* Permissions + SHM_DEST and SHM_LOCKED flags */ unsigned short __seq; /* Sequence number */ }; 9 mode ipc_perm . : 0400 0200 0040 0020 0004 0002 0100 0010 0001 ( ) . ( shmat(2) SHM_EXEC.) op : IPC_STAT shmid shmid_ds buf. . IPC_SET shmid_ds buf shm_ctime . : shm_perm.uid shm_perm.gid ( 9 ) shm_perm.mode. UID (shm_perm.uid) (shm_perm.cuid) . IPC_RMID . ( shm_nattch shmid_ds ). . buf . ( ) SHM_DEST shm_perm.mode IPC_STAT. . /proc/sys/kernel/shm_rmid_forced proc(5). IPC_INFO ( ) buf. shminfo ( ) _GNU_SOURCE: 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 */ }; shmmni shmmax shmall /proc proc(5) . SHM_INFO ( ) shm_info . _GNU_SOURCE: 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 */ }; SHM_STAT ( ) shmid_ds IPC_STAT. shmid . SHM_STAT_ANY ( 4.17) shmid_ds SHM_STAT. shm_perm.mode shmid ( /proc/sysvipc/shm ). op : SHM_LOCK ( ) . . ( ) SHM_LOCKED shm_perm.mode IPC_STAT. SHM_UNLOCK ( ) . 2.6.10 SHM_LOCK SHM_UNLOCK. 2.6.10 ( SHM_LOCK) RLIMIT_MEMLOCK ( setrlimit(2)). IPC_INFO SHM_INFO . ( SHM_STAT SHM_STAT_ANY .) SHM_STAT shmid. 0 . -1 errno . EACCES IPC_STAT SHM_STAT shm_perm.mode shmid CAP_IPC_OWNER IPC . EFAULT op IPC_SET IPC_STAT buf . EIDRM shmid . EINVAL shmid op . : SHM_STAT SHM_STAT_ANY shmid . ENOMEM ( 2.6.9) SHM_LOCK . RLIMIT_MEMLOCK ( setrlimit(2)). EOVERFLOW IPC_STAT GID UID buf. EPERM IPC_SET IPC_RMID ( shm_perm.cuid) ( shm_perm.uid) (: CAP_SYS_ADMIN). ( 2.6.9) SHM_LOCK SHM_UNLOCK (: CAP_IPC_LOCK). ( 2.6.9 RLIMIT_MEMLOCK 0 .) (shmat(2)) shmctl(IPC_RMID). UNIX . POSIX.1-2024. POSIX.1-2001 SVr4. struct shmid_ds short 2.2 long 2.4. glibc-2.1.91 . ( IPC_64 op.) IPC_INFO SHM_STAT SHM_INFO ipcs(1) . /proc. mlock(2), setrlimit(2), shmget(2), shmop(2), capabilities(7), sysvipc(7) 3 . . : . 6.18 8 2026 shmctl(2)