next up previous
Next: Como criar um conjunto Up: Os Semáforos Previous: Estruturas associadas aos semáforos


A Função semget()

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

       int semget ( key_t key, int nsems, int semflg )

Valor de retorno: o identificador (ou ID) do conjunto de semáforos semid, e -1 em caso de erro.

A função semget() é utilizada para criar um novo conjunto de semáforos, ou para obter o ID de um conjunto de semáforos já existentes. O primeiro argumento, key, é uma chave indicando o nome (valor numérico) de um conjunto de semáforos. O segundo argumento, nsems, indica o número de semáforos do conjunto. O último argumento, semflg, é um flag especificando os direitos de acesso ao semáforo.

Um novo conjunto de semáforos será criado se key tiver valor IPC_PRIVATE (=0), ou se ele não for IPC_PRIVATE, anenhum conjunto de semáforos existente será associado a key, e IPC_CREAT é colocado em semflg.

A presença dos campos IPC_CREAT e IPC_EXCL em semflg têm a mesma função em se tratando da existência ou não do conjunto de semáforos, que no caso das presenças de IPC_CREAT e IPC_EXCL associadas a primitiva open() apresentada no capítulo 1. Em outras palavras, a função semget falha se semflg contiver os flags IPC_CREAT e IPC_EXCL e o conjunto de semáforos já existir para uma outra chave.

O argumento semflg é definido como a combinação de diferentes constantes pré-definidas, permitindo de especificar os direitos de acesso, e os comandos de controle (usando a combinação clássica por intermédio dos operadores OU). Note que existe uma grande semelhança entre os direitos de acesso para a utilização dos semáforos e aqueles associados aos arquivos em UNIX: as mesmas noções de autorização de acesso para outros ou para o grupo são definidas da mesma forma (ver capítulo 1, seção XXXX).

As constantes utilizadas com semflg pré-definidas em <sys/sem.h> e em <sys/ipc.h> são as seguintes:

/* Mode bits for `msgget', `semget', and `shmget'.  */
#define IPC_CREAT       01000           /* Create key if key does not exist. */
#define IPC_EXCL        02000           /* Fail if key exists.  */
#define IPC_NOWAIT      04000           /* Return error on wait.  */

/* Control commands for `msgctl', `semctl', and `shmctl'.  */
#define IPC_RMID        0               /* Remove identifier.  */
#define IPC_SET         1               /* Set `ipc_perm' options.  */
#define IPC_STAT        2               /* Get `ipc_perm' options.  */
#define IPC_INFO        3               /* See ipcs.  */



Subsections
next up previous
Next: Como criar um conjunto Up: Os Semáforos Previous: Estruturas associadas aos semáforos
Celso Alberto Saibel Santos 2000-11-14