Note ainda que durante a criação de um conjunto de semáforos, um certo
número de campos da estrutura semid_ds são iniciados
(proprietário, modo de acesso, etc). Faça man semget para
obter a lista completa dos parâmetros modificados com a chamada
semget. No caso do exemplo, o valor 0600 garante ao
usuário as permissões de escrita e leitura do array de semáforos.
Exemplo
O programa test_semget.c cria um conjunto de 4 semáforos associados à chave 123.
/* arquivo test_semget.c */ /* exemplo de uso de semget() */ #include <errno.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <stdio.h> #define KEY 123 int main() { int semid ; /* identificador dos semaforos */ char *path = "nome_de_arquivo_existente" ; /* alocacao de 4 semaforos */ if (( semid = semget(ftok(path,(key_t)KEY), 4, IPC_CREAT|IPC_EXCL|0600)) == -1) { perror("Erro de semget") ; exit(1) ; } printf(" O semid do conjunto do semaforo e : %d\n",semid) ; printf(" Este conjunto e identificado pela chave unica : %d\n" ,(int) ftok(path,(key_t)KEY)) ; exit(0); }
Resultado da execução:
euler:~/> test_semget O semid do conjunto do semaforo e : 1920 Este conjunto e identificado pela chave unica : 2063902908 euler:~/> test_semget Erro de semget: File exists euler:~/> ipcs -s ------ Semaphore Arrays -------- key semid owner perms nsems status 0x7b04a8bc 1920 saibel 600 4