semop (2)
   управляющие операции над семафорами  

Синтаксис
 
    # include <sys/types.h>
    # include <sys/ipc.h>
    # include <sys/sem.h>

    int semop ( int semid, struct sembuf *sops, unsigned nsops )

Описание
  semop выполняет операции над выбранными элементами массива семафоров, задаваемого идентификатором semid. Каждый из nsops элементов массива, на который указывает sops, задает одну операцию над одним семафором и содержит поля:
    short sem_num; /* Номер семафора */
    short sem_op;  /* Операция над семафором */
    short sem_flg; /* Флаги операции */

Значение поля sem_op возможны следующие:

  1. Если значение sem_op отрицательно, то:
    • Если значение семафора больше или равно абсолютной величине sem_op, то абсолютная величина sem_op вычитается из значения семафора.
    • В противном случае процесс переводится в ожидание до тех пор, пока значение семафора не станет больше или равно абсолютной величине sem_op.
  2. Если значение sem_op положительно, то оно добавляется к значению семафора.
  3. Если значение sem_op равно нулю, то:
    • Если значение семафора равно нулю, то управление сразу же возвращается вызывающему процессу.
    • Если значение семафора не равно нулю, то выполнение вызывающего процесса приостанавливается до установки значения семафора в 0.

Флаг операции может принимать значения IPC_NOWAIT или/и SEM_UNDO. Первый из флагов определяет, что semop не переводит процесс в ожидание, когда этого требует выполнение семафорной операции, а заканчивается с признаком ошибки. Второй определяет, что операция должна откатываться при завершении процесса.

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

См.также
  semctl, semget.


Список системных вызовов