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