В справочной статье semctl синтаксис данного
системного вызова описан так:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semctl (semid, semnum, cmd, arg)
int semid, cmd;
int semnum;
union semun {
int val;
struct semid_ds *buf;
ushort *array;
} arg;
Результат системного вызова semctl в случае успешного завершения зависит от
выполняемого управляющего действия. Как правило он равен 0, но четыре действия
(GETVAL, GETPID, GETNCNT и GETZCNT) являются исключениями. При возникновении
ошибки всегда возвращается -1.
Аргументы semid и semnum определяют множество или отдельный семафор, над которым выполняется управляющее действие. В качестве аргумента semid должен выступать идентификатор множества семафоров, предварительно полученный при помощи системного вызова semget. Аргумент semnum задает номер семафора в множестве. Семафоры нумеруются с нуля.
Назначение аргумента arg зависит от управляющего действия, которое определяется значением аргумента cmd. Допустимы следующие действия:
GETVAL
Получить значение семафора и выдать его в качестве результата.
SETVAL
Установить значение семафора равным arg.val.
GETPID
Получить идентификатор процесса, последним выполнявшего операцию над семафором, и выдать его в качестве результата.
GETNCNT
Получить число процессов, ожидающих увеличения значение семафора, и выдать его в качестве результата.
GETZCNT
Получить число процессов, ожидающих обнуления значения семафора, и выдать его в качестве результата.
GETALL
Прочитать значения всех семафоров множества и поместить их в массив, на который указывает arg.array.
SETALL
Установить значения всех семафоров множества равными значениям элементов массива, на который указывает arg.array.
IPC_STAT
Поместить информацию о состоянии множества семафоров, содержащуюся в структуре данных, ассоциированной с идентификатором semid, в пользовательскую структуру, на которую указывает arg.buf.
IPC_SET
В структуре данных, ассоциированной с идентификатором semid, переустановить значения действующих идентификаторов пользователя и группы, а также прав на операции. Нужные значения извлекаются из структуры данных, на которую указывает arg.buf.
IPC_RMID
Удалить из системы идентификатор semid, ликвидировать множество семафоров и ассоциированную с ним структуру данных.