| Сервер поддерживается Центром Информационных Технологий (095) 932-9212, 932-9213, 939-0783 E-mail: info@citforum.ru

Сервер содержит море(!) аналитической информации | CIT Forum CD-ROM

### 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 [см. intro(2)]. {Требуется право на чтение.}
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. Содержимое этой структуры определяется в intro(2). {Требуется право на чтение.}
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 указывает за пределы отведенного процессу адресного пространства.

СМ. ТАКЖЕ
intro(2), semget(2), semop(2).

ДИАГНОСТИКА
При успешном завершении системного вызова возвращаются следующие значения, в зависимости от команды cmd:

GETVAL | Значение семафора semval.
GETPID | Идентификатор процесса sempid.
GETNCNT | Значение semncnt.
GETZCNT | Значение semzcnt.

Результат успешного выполнения остальных операций равен 0.

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

Comments: info@citmgu.ru Designed by Andrey Novikov Copyright © CIT