Системное программирование в UNIX средствами Free Pascal


         

Описание


uses ipc;

Function semctl(semid:longint; sem_num:longint; command:longint;

                var ctl_arg:tsemun):longint;

Из определения видно, что функция semctl намного сложнее, чем msgctl. Параметр semid должен быть допустимым идентификатором семафора, возвращенным вызовом semget. Параметр command имеет тот же смысл, что и в вызове msgctl,

– задает требуемую команду. Команды распадаются на три категории: стандартные команды управления средством межпроцессного взаимодействия (такие как IPC_STAT); команды, которые воздействуют только на один семафор; и команды, действующие на весь набор семафоров. Все доступные команды приведены в табл. 8.1.

Таблица 8.1. Коды функций вызова semctl

Стандартные функции межпроцессного взаимодействия

IPC_STAT        Поместить информацию о статусе в поле ctl_arg.stat

IPC_SET          Установить данные о владельце/правах доступа

IPC_RMID        Удалить набор семафоров из системы

Операции над одиночными семафорами

(относятся к семафору sem_num, значение возвращается вызовом semctl)

GETVAL            Вернуть значение семафора (то есть setval)

SETVAL            Установить значение семафора равным ctl_arg.val

GETPID            Вернуть значение sempid

GETNCNT          Вернуть semncnt (см. выше)

GETZCNT          Вернуть semzcnt (см. выше)

Операции над всеми семафорами

GETALL            Поместить все значения setval в массив ctl_arg.array

SETALL            Установить все значения setval из массива ctl_arg.array

Параметр sem_num используется со второй группой возможных операций вызова semctl для задания определенного семафора. Последний параметр ctl_arg является объединением

(записью с вариантами), определенным следующим образом:

PSEMun = ^TSEMun;

TSEMun = record

  case longint of

    0 : (val    : longint);

    1 : (buf    : PSEMid_ds);

    2 : (arr    : PWord);

    3 : (padbuf : PSeminfo);

    4 : (padpad : pointer);

  end;

Каждый элемент объединения представляет некоторый тип значения, передаваемого вызову semctl при выполнении определенной команды. Например, если значение command равно SETVAL, то будет использоваться элемент ctl_arg.val.




Содержание  Назад  Вперед