[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Управление семафорами

semctl(2) выполняет действия по управлению наборами семафоров и
одиночными семафорами из набора. Аргументы semctl(2):
  semid   идентификатор, полученный от semget(2)

  semnum  индекс семафора  в наборе.  Первый семафор в наборе имеет
          индекс 0.

  cmd     команда. Возможные  значения этого  аргумента обсуждаются
          на следующей странице.

  arg     тип этого  параметра зависит  от команды  cmd. Это  может
          быть:

            .  Целое число, задающее новое значение семафора

            .  Указатель  на  массив  беззнаковых  коротких  целых,
               используемый для установки и получения значения всех
               семафоров в наборе.

            .  Указатель на  информационную структуру  semid_ds для
               набора семафоров.

               bsys/sem.h:

               struct semid_ds {
               struct ipc_permsem_perm;/* operation permission
               struct */
               struct semsem_base;/* ptr to first semaphore in set
               */
               ushortsem_nsems;/* # of semaphores in set */
               time_tsem_otime;/* last semop time */
               longsem_otimfrac;/* reserved for time_t expansion */
               time_tsem_ctime;/* last change time */
               longsem_ctimfrac;
               longpad[4]; /* reserve area */
               };

Системный параметр SEMVMX - это наибольшее значение, которое может
быть присвоено семафору вызовом semctl(2) с командами SETVAL и
SETALL. Значение по умолчанию (оно же максимальное) 32767.
intro(2) содержит дополнительную информацию о структурах данных,
используемых для работы с семафорами. Кроме того, можно получить
справки в файлах <sys/ipc.h> и <sys/sem.h>.
                       УПРАВЛЕНИЕ СЕМАФОРАМИ
semctl(2)

ИМЯ

    semctl - действия по управлению семафорами.

ИСПОЛЬЗОВАНИЕ

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

    union semun {
    int val;
    struct semid_ds *buf;
    ushort *array;
    };
    int semctl (int semid, int semnum, int cmd, union
     semun arg);

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

    GETVAL     - значение семафора

    GETPID     - идентификатор процесса, совершившего последнюю
                 операцию над семафором

    GETNCNT    - количество процессов, ожидающих увеличения
                 значения семафора по сравнению с текущим значением

    GETZCNT    - количество процессов, ожидающих нулевого значения
                 семафора

    неуспех    - -1 и errno установлена