A criação de uma fila de mensagens é similar à criação de um conjunto de semáforos, ou de um segmento de memória compartilhada. As seguintes regras básicas devem ser respeitadas nesse caso:
Note ainda que durante a criação de um fila de mensagens, alguns campos da estrutura msqid_ds são iniciados (proprietário, modos de acesso, data de criação, etc.).
Exemplo:
Exemplo de utilização do msgget(): este programa cria uma fila de mensagens associada à chave 123, e verifica o conteúdo das estruturas do sistema próprias a essa fila.
/* arquivo test_msgget.c */ /* * exemplo de utilizacao de msgget() */ #include <errno.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> #define KEY 123 int main() { int msqid ; /* ID da fila de mensagens */ char *path = "nome_de_arquivo_existente" ; /* * criacao de uma fila de mensagens para leitura se * ela ainda nao existe */ if (( msqid = msgget(ftok(path,(key_t)KEY), IPC_CREAT|IPC_EXCL|0600)) == -1) { perror("Erro de msgget") ; exit(1) ; } printf("identificador da fila: %d\n",msqid) ; printf("esta fila esta associada a chave unica : %#x\n" ,ftok(path,(key_t)KEY)) ; exit(0); }
Resultado da execução:
euler:~/> test_msgget identificador da fila: 1152 esta fila esta associada a chave unica : 0x7b045862 euler:~/> ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages 0x7b045862 1152 saibel 600 0 0