Sistemas Operacionais

Chamada de Sistema: msgrcv()


SINÓPSE

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

 

DESCRIÇÃO

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.

 

EXEMPLO

#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" );
  }

 

VEJA TAMBÉM

msgctl, msgsnd, msgget


DISPONÍVEL

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