Системный вызов semctl

Прототип системного вызова

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

int semctl(int semid, int semnum, int cmd, union semun arg);

Описание системного вызова

Системный вызов semctl предназначен для получения информации о массиве IPC семафоров, изменения его атрибутов и удаления его из системы. Данное описание не является полным описанием системного вызова, а ограничивается рамками текущего курса. Для изучения полного описания обращайтесь к UNIX man.

В нашем курсе мы будем пользоваться системным вызовом semctl только для удаления массива семафоров из системы. Параметр semid является дескриптором System V IPC для массива семафоров, т.е. значением, которое вернул системный вызов semget() при создании массива или при его поиске по ключу.
В качестве параметра cmd в рамках нашего
курса мы всегда будем передавать значение IPC_RMID - команду для удаления сегмента разделяемой памяти с заданным идентификатором. Параметры semnum и arg для этой команды не используется, поэтому мы всегда будем подставлять вместо них значение 0.

Если какие-либо процессы находились в состоянии ожидание для семафоров из удаляемого массива при выполнении системного вызова semop(), то они будут разблокированы и вернутся из вызова semop() с индикацией ошибки.

Возвращаемое значение

Системный вызов возвращает значение 0 при нормальном завершении и значение -1 при возникновении ошибки.