#include < sys/types.h > #include < sys/ipc.h > #include < sys/msg.h > int msgrcv (int msqid, struct msgbuf *msgp, int msgsz, long msgtyp, int msgflg)
A chamada de sistema msgrcv
é usada para ler uma mensagem de uma fila de mensagens. msgqid é o número ID da fila de mensagens da qual uma mensagem será lida. msgp é o buffer da mensagem para onde a mesma será copiada. msgsz indica o tamanho máximo possível que a mensagem poderá ter. msgtyp significa o tipo de mensagem que será lida da fila. msgflag é usada para passar flags adicionais para a chamada. Veja a página apropriada do manual do sistema para se obter maiores informações.Sob circunstâncias normais, o chamador conhece o número ID da fila de mensagens da qual a mensagem será lida e o tipo da mensagem que necessita ser lida. Uma estrutura do tipo msgbuf é declarada com o seguinte formato:
struct msgbuf {
long mtype;
char mtext[SIZE];
};
O valor de SIZE é passado para a chamada msgrcv. Se o tamanho da mensagem da fila é maior do que isso, o valor -1 será retornado e um erro será gerado. msgflag é tipicamente ajustada para 0 mas pode ser usada para alterar o controle da chamada. Veja a respectiva página do manual para maiores detalhes.
Veja o Experimento #3 para maiores informações sobre fila de mensagens.
#define SIZE 10
struct msgbuf {
long mtype;
char mtext[SIZE];
};
...
int msg_id;
struct msgbuf buf;
...
msg_id = 5;
...
if( msgrcv(msg_id, &buf, SIZE, 10, 0) == -1 )
{
perror( "msgrcv" );
}
AIX, Linux, Lynx, SunOS e Solaris
Para maiores informações sobre este comando, consulte a página do manual de seu sistema operacional (comando man).