semop(2) System Calls Manual semop(2) semop, semtimedop - (semaphore) V (libc -lc) #include int semop(int semid, struct sembuf *sops, size_t nsops); int semtimedop(int semid, struct sembuf *sops, size_t nsops, const struct timespec *_Nullable timeout); glibc ( feature_test_macros(7)): semtimedop(): _GNU_SOURCE System V : unsigned short semval; /* semaphore value */ unsigned short semzcnt; /* # waiting for zero */ unsigned short semncnt; /* # waiting for increase */ pid_t sempid; /* PID of process that last modified the semaphore value */ semop() semid. nsops sops . struct sembuf : unsigned short sem_num; /* semaphore number */ short sem_op; /* semaphore operation */ short sem_flg; /* operation flags */ sem_flg IPC_NOWAIT SEM_UNDO. SEM_UNDO . sops . IPC_NOWAIT sem_flg . sem_num 0. sem_op. sem_op (semval). SEM_UNDO sem_op (semadj) . -- . . sem_op . " ": semval . IPC_NOWAIT sem_flg semop() errno EAGAIN ( sops). semzcnt ( ) : o semval 0 semzcnt. o : semop() errno EIDRM. o : semzcnt semop() errno EINTR. sem_op . semval sem_op : sem_op semval SEM_UNDO sem_op (semadj) . sem_op semval IPC_NOWAIT sem_flg semop() errno EAGAIN ( sops). semncnt ( ) : o semval sem_op: . o : semop() errno EIDRM. o : semncnt semop() errno EINTR. sempid sops . sem_otime . semtimedop() semtimedop() semop() timespec timeout. ( .) semtimedop() errno EAGAIN ( sops). timeout NULL semtimedop() semop(). semtimedop() EINTR timeout . semop() semtimedop() 0. -1 errno . E2BIG nsops SEMOPM . EACCES CAP_IPC_OWNER IPC . EAGAIN IPC_NOWAIT sem_flg timeout. EFAULT sops timeout . EFBIG sem_num 0 . EIDRM . EINTR signal(7). EINVAL semid nsops . ENOMEM sem_flg SEM_UNDO . ERANGE sem_op+semval SEMVMX semval. POSIX.1-2024. semop() SVr4, POSIX.1-2001. semtimedop() SVr4 2.5.52 ( 2.4.22) glibc 2.3.3. sem_undo fork(2) execve(2). semop() SA_RESTART . (semadj) SEM_UNDO. semadj-- SEM_UNDO. semadj ( ). SETVAL SETALL semctl(2) semadj . clone(2) CLONE_SYSVSEM semadj clone(2) . semval sempid semzcnt semnct semctl(2) . semop(): SEMOPM semop() . 3.19 32. 3.19 500. /proc/sys/kernel/sem. : 1000 semop() sops. SEMVMX semval: (32767). (SEMAEM) (SEMMNU) . semadj SEM_UNDO. : ( ) . . ( IPC_NOWAIT ). : ( ) . 2.6.x x <= 10 . 2.6.11. semop() 0 . struct sembuf sops[2]; int semid; /* Code to set semid omitted */ sops[0].sem_num = 0; /* Operate on semaphore 0 */ sops[0].sem_op = 0; /* Wait for value to equal 0 */ sops[0].sem_flg = 0; sops[1].sem_num = 0; /* Operate on semaphore 0 */ sops[1].sem_op = 1; /* Increment value by one */ sops[1].sem_flg = 0; if (semop(semid, sops, 2) == -1) { perror("semop"); exit(EXIT_FAILURE); } semop() shmop(2). clone(2) semctl(2) semget(2) sigaction(2) capabilities(7) sem_overview(7) sysvipc(7) time(7) 3 . . : . 6.18 8 2026 semop(2)