Teste
INSTITUTO SUPERIOR DE CIÊNCIAS DO TRABALHO E DA EMPRESA
Sistemas Operativos ETI - IGE
2º Semestre 2003/2004
Aula 04
Filas de mensagem
1. Criar uma fila de mensagens. Mandar uma mensagem.
Os procedimentos para filas de mensagens são em parte semelhantes aos dos semáforos. Para criar uma fila de mensagens usase a função msgget, como se exemplifica no seguinte programa que também envia uma mensagem para a fila criada. Para enviar uma mensagem usa-se a função msgsnd. O primeiro argumento é, obviamente, o id obtido de msgget. O segundo argumento é a mensagem propriamente dita, o terceiro argumento é o tamanho da mensagem e o último argumento é, normalmente, 0 (mas adiante veremos outras hipóteses). Sobre a mensagem, a regra é que deve existir um campo int (designado de "tipo" da mensagem) antes da mensagem propriamente dita. Dentro desta regra, é o programa que define a estrutura das mensagens. Neste caso foi definida uma estrutura MsgStruct que prevê mensagens contendo, no máximo, 250 caracteres.
#include #include #include typedef struct { int type; char text[250]; } MsgStruct; main() { int msg_id; int status; MsgStruct msg; // ligar à fila de mensagens msg_id = msgget ( 1000, 0600 | IPC_CREAT ); exit_on_error (msg_id, "Criação/Ligação"); // enviar ums mensagem msg.type = 1; strcpy( msg.text, "Uma mensagem qualquer."); status = msgsnd( msg_id, &msg, sizeof(msg.text), 0); exit_on_error (msg_id, "Envio"); printf ("Mensagem enviada!\n"); }
2. Comandos
O comando ipcs -m (ou só ipcs) permite ver as filas de mensagens criadas. Pode também, nessa lista, ver o número de mensagens actualmente em espera na fila.
3. Receber uma mensagem.
O seguinte programa recebe (receber, neste contexto, quer dizer retirar) uma mensagem da fila. A única diferença sensível é que,
file://C:\DOCUME~1\THIAGO~1\CONFIG~1\Temp\VOM29K58.htm
5/9/2005
Página 2 de 5
em vez de msgsnd para mandar uma mensagem, temos a função msgrcv para receber.