Msgrcv: message receive operation
SYNOPSIS
#include <sys/msg.h> ssize_t msgrcv(int void *msgp, size_t long int msqid, msgsz, msgtyp, int msgflg);
DESCRIPTION
La funzione msgrcv() legge un messaggio dalla coda associata con l'identificatore di coda di messaggi specificato da msqid e lo posiziona nel buffer definito dall'utente a cui punta msgp.
L'argomento msgp punta a un buffer definito dall'utente che deve contenere prima un campo di tipo long che specificherà il tipo del messaggio, e poi una parte di dati che conterrà i dati int byte del messaggio. La struttura seguente è un esempio di come potrebbe essere questo buffer definito dall'utente:
struct mymsg {
long int mtype; /* message type */
char mtext[1]; /* message text */
}
Il membro della struttura mtype è il tipo di messaggio ricevuto come specificato dal processo di invio. Il membro della struttura mtext è il testo del messaggio.
L'argomento msgsz specifica la dimensione in byte del testo del messaggio ricevuto. Il messaggio ricevuto viene troncato a msgsz byte se è più grande di msgsz e (msgflg & MSG_NOERROR) è diverso da zero. La parte troncata del messaggio viene persa e non viene data alcuna indicazione della troncatura al processo chiamante.
Se il valore di msgsz è maggiore di {SSIZE_MAX}, il risultato dipende dall'implementazione.
L'argomento msgtyp specifica il tipo di messaggio richiesto come segue:
- Se msgtyp è 0, viene ricevuto il primo messaggio nella coda.
- Se msgtyp è maggiore di 0, viene ricevuto il primo messaggio di tipo msgtyp.
- Se msgtyp è minore di 0, viene ricevuto il primo messaggio del tipo più basso che è minore o uguale al valore assoluto di msgtyp.
L'argomento msgflg specifica l'azione da intraprendere se un messaggio del tipo desiderato non è nella coda. Queste sono le seguenti:
-
Sistemi operativi - Syscall fork
-
Sistemi operativi - Syscall fprintf
-
Sistemi operativi - Syscall memcpy
-
Sistemi operativi - Syscall msgsnd