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