semctl(2) System Calls Manual semctl(2) semctl - (semaphore) V (libc -lc) #include int semctl(int semid, int semnum, int op, ...); semctl() op (semaphore) V semid semnum . ( 0.) op. union semun. (union) : union semun { int val; /* Value for SETVAL */ struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ unsigned short *array; /* Array for GETALL, SETALL */ struct seminfo *__buf; /* Buffer for IPC_INFO (Linux-specific) */ }; semid_ds : struct semid_ds { struct ipc_perm sem_perm; /* Ownership and permissions */ time_t sem_otime; /* Last semop time */ time_t sem_ctime; /* Creation time/time of last modification via semctl() */ unsigned long sem_nsems; /* # of semaphores in set */ }; semid_ds : sem_perm ipc_perm ( ) . sem_otime semop(2). sem_ctime semctl() IPCSET SETVAL SETALL. sem_nsems . 0 sem_nsems-1. ipc_perm ( IPC_SET): struct ipc_perm { key_t __key; /* Key supplied to semget(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 */ unsigned short __seq; /* Sequence number */ }; 9 mode ipc_perm . : 0400 0200 0040 0020 0004 0002 "write" "" . 0100 0010 0001 ( ) . op : IPC_STAT semid semid_ds arg.buf. semnum. . IPC_SET semid_ds arg.buf sem_ctime . : sem_perm.uid sem_perm.gid ( 9 ) sem_perm.mode. UID (sem_perm.uid) (sem_perm.cuid) (privileged). semnum. IPC_RMID semop(2) ( errno EIDRM). . semnum. IPC_INFO ( ) arg.__buf. seminfo _GNU_SOURCE: struct seminfo { int semmap; /* Number of entries in semaphore map; unused within kernel */ int semmni; /* Maximum number of semaphore sets */ int semmns; /* Maximum number of semaphores in all semaphore sets */ int semmnu; /* System-wide maximum number of undo structures; unused within kernel */ int semmsl; /* Maximum number of semaphores in a set */ int semopm; /* Maximum number of operations for semop(2) */ int semume; /* Maximum number of undo entries per process; unused within kernel */ int semusz; /* Size of struct sem_undo */ int semvmx; /* Maximum semaphore value */ int semaem; /* Max. value that can be recorded for semaphore adjustment (SEM_UNDO) */ }; semmsl semmns semopm semmni /proc/sys/kernel/sem proc(5) . SEM_INFO ( ) seminfo IPC_INFO : semusz semaem . SEM_STAT ( ) semid_ds IPC_STAT. semid . SEM_STAT_ANY ( 4.17) semid_ds SEM_STAT. sem_perm.mode semid ( /proc/sysvipc/sem ). GETALL semval ( ) arg.array. semnum . . GETNCNT semncnt semnum ( ). . GETPID sempid semnum . PID ( ). . GETVAL semval ( ) semnum . . GETZCNT semzcnt semnum ( 0). . SETALL semval arg.array sem_ctime semid_ds . ( semop(2)) . semop(2) . semnum . () . SETVAL (semval) arg.val semnum sem_ctime semid_ds . . semop(2) . . semctl() op : GETNCNT semncnt. GETPID sempid. GETVAL semval. GETZCNT semzcnt. IPC_INFO . ( SEM_STAT SEM_STAT_ANY .) SEM_INFO IPC_INFO. SEM_STAT semid. SEM_STAT_ANY SEM_STAT. op 0 . semctl() -1 errno . EACCES op GETALL GETPID GETVAL GETNCNT GETZCNT IPC_STAT SEM_STAT SEM_STAT_ANY SETALL SETVAL CAP_IPC_OWNER IPC . EFAULT arg.buf arg.array . EIDRM . EINVAL op semid. : SEM_STAT semid . EPERM op IPC_SET IPC_RMID ( sem_perm.cuid) ( sem_perm.uid) CAP_SYS_ADMIN. ERANGE op SETALL SETVAL semval ( ) 0 SEMVMX. POSIX.1 sem_nsems semid_ds unsigned short . Linux 2.2 Linux 2.4 unsigned long. sempid POSIX.1 sempid " " semop(2) sempid. POSIX.1 . ( POSIX.1 .) sempid : SETVAL SETALL SEM_UNDO ( semop(2)). Linux sempid SETVAL . Linux 4.5 sempid SETALL. Linux 4.6. POSIX.1-2024. POSIX.1-2001 SVr4. struct semid_ds short Linux 2.2 long Linux 2.4. glibc-2.1.91 . ( IPC_64 op.) glibc semun POSIX.1 . glibc _SEM_SEMUN_UNDEFINED . IPC_INFO SEM_STAT SEM_INFO ipcs(1) . /proc. semctl(): SEMVMX semval: (32767). semctl() . shmop(2). ipc(2), semget(2), semop(2), capabilities(7), sem_overview(7), sysvipc(7) 3 . . : . 6.18 8 2026 semctl(2)