Man pages на русском

         

SEMCTL(2)


НАЗВАНИЕ

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 позволяет выполнять операции управления семафорами. Семафоры задаются аргументами semid и semnum. Операция определяется значением аргумента cmd, которое должно быть одним из следующих:

GETVAL Получить значение семафора semval [см. ]. {Требуется право на чтение.} SETVAL Установить значение семафора semval равным arg.val. {Требуется право на изменение.} После успешного выполнения этой команды значение semadj, соответствующее заданному семафору во всех процессах, устанавливается равным 0. GETPID Получить значение sempid. {Требуется право на чтение.} GETNCNT Получить значение semncnt. {Требуется право на чтение.} GETZCNT Получить значение semzcnt. {Требуется право на чтение.}

Следующие команды cmd читают и устанавливают значение каждого семафора в множестве семафоров:

GETALL Прочитать значения семафоров в массив, на который указывает arg.array. {Требуется право на чтение.} SETALL Установить значения семафоров равными значениям элементов массива, на который указывает arg.array. {Требуется право на изменение.} После успешного выполнения этой команды значения semadj, соответствующие заданным семафорам во всех процессах, устанавливаются равными 0.

Предоставляются также следующие команды:

IPC_STAT Поместить текущее значение каждого поля структуры данных, ассоциированной с идентификатором semid, в структуру, на которую указывает arg.buf. Содержимое этой структуры определяется в . {Требуется право на чтение.} IPC_SET Присвоить следующим полям структуры данных, ассоциированной с идентификатором semid, соответствующие значения, находящиеся в структуре, на которую указывает arg.buf:

sem_perm.uid sem_perm.gid sem_perm.mode /* Только младшие 9 бит */

Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный либо идентификатору суперпользователя, либо значению поля sem_perm.cuid или sem_perm.uid в структуре данных, ассоциированной с идентификатором semid. IPC_RMID Удалить из системы идентификатор семафора, определяемый значением semid, ликвидировать множество семафоров и ассоциированную с ним структуру данных. Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный либо идентификатору суперпользователя, либо значению поля sem_perm.cuid или sem_perm.uid в структуре данных, ассоциированной с идентификатором semid.




Системный вызов semctl завершается неудачей, если выполнено хотя бы одно из следующих условий:

[EINVAL] Значение аргумента semid не является корректным идентификатором множества семафоров. [EINVAL] Номер семафора semnum меньше 0 или превышает значение sem_nsems. [EINVAL] Некорректное значение аргумента cmd, определяющее команду. [EACCES] Нет прав на выполнение операции у вызывающего процесса. [ERANGE] Значение аргумента cmd равно SETVAL или SETALL и значение, которое присваивается семафору, больше максимально допустимого в системе. [EPERM] Значение аргумента cmd равно IPC_RMID или IPC_SET и действующий идентификатор пользователя вызывающего процесса не равен ни идентификатору суперпользователя, ни значению поля sem_perm.cuid или sem_perm.uid в структуре данных, ассоциированной с идентификатором semid. [EFAULT] Значение arg.buf указывает за пределы отведенного процессу адресного пространства.

СМ. ТАКЖЕ

, , .

ДИАГНОСТИКА

При успешном завершении системного вызова возвращаются следующие значения, в зависимости от команды cmd:
GETVALЗначение семафора semval. GETPIDИдентификатор процесса sempid. GETNCNTЗначение semncnt. GETZCNTЗначение semzcnt. Результат успешного выполнения остальных операций равен 0.

В случае ошибки возвращается -1, а переменной errno присваивается код ошибки.
Содержание раздела