#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).