#include < sys/types.h > #include < sys/ipc.h > #include < sys/sem.h > int semop ( int semid, struct sembuf *sops, unsigned nsops )
A chamada de sistema semop()
permite a execução de uma série de operações sobre um semid (ID de semáforo) específico. A estrutura sembuf aponta para um vetor de operações que devem ser executadas. nsops indica o número de operações a serem executadas, ou seja, o número de estruturas sembuf existentes no vetor (ambos são equivalente).A estrutura sembuf contém pelo menos os seguintes elementos:
short sem_num; /* numero do semaforo */ short sem_op; /* operacao a ser realizada sobre o semaforo */ short sem_flg; /* flags da operacao */
onde sem_num é o semáforo dentro do conjunto a ser operado. sem_op é a operação a ser executada. sem_flg constitui um conjunto de flags associado com a operação.
A lista de operações somente será executada se e somente se todas forem bem sucedidas. Com o propósito dos experimentos, o conjunto somente contém um semáforo e somente uma operação será feita em um determinado instante, então esta propriedade de várias operações não será usada.
Para um semáforo binário, um que pode ser travado ou destravado, utilizar a operação de -1 para travar e 1 para destravar. Veja as páginas do manual para definições detalhadas das operações que podem ser executadas num semáforo.
Veja o Experimento #5 para maiores informações sobre semáforos.
Para travar previamente um semáforo criando com o ID 4:
#include < sys/types.h > #include < sys/ipc.h > #include < sys/sem.h > ... int sem_id; struct sembuf lock_sembuf[1]; lock_sembuf[0].sem_num = 0; lock_sembuf[0].sem_op = -1; lock_sembuf[0].sem_flg = 0; ... sem_id = 4; ... if( semop( sem_id, lock_sembuf, 1 ) == -1 ) { perror("semop"); }
AIX, Linux, Lynx, SunOS e Solaris
Para maiores informações sobre este comando, consulte a página do manual de seu sistema operacional (comando man).