| msgop | |||
Nommsgop, msgrcv, msgsnd - Opérations sur les messages.Synopsis# include <sys/types.h> # include <sys/ipc.h> # include <sys/msg.h> int msgsnd (int msqid, struct msgbuf * msgp, size_t msgsz, int msgflg) ssize msgrcv (int msqid, struct msgbuf * msgp, size_t msgsz, long msgtyp, int msgflg) DescriptionPour envoyer ou recevoir un message, le processus appelant alloue une structure comme celle-ci :
struct msgbuf {
long mtype; /* type de message ( > 0 ) */
char mtext[1]; /* contenu du message */
};
avec une table mtext de taille msgsz, valeur entière non-négative. Le membre mtype doit avoir une valeur strictement positive qui puisse être utilisée par le processus lecteur pour la sélection de messages (voir plus bas). Le processus doit avoir une permission d'écriture sur la file pour envoyer un message, et une permission de lecture pour en recevoir un. L'appel système msgsnd insère une copie du message pointé par l'argument msgp dans la file dont l'identificateur est indiqué par la valeur de l'argument msqid. L'argument msgflg précise le comportement de l'appel système si l'insertion du nouveau message nécessite plus de msg_qbytes dans la file. En indiquant IPC_NOWAIT le message ne sera pas envoyé et l'appel système échouera en retournant EAGAIN dans errno. Sinon, le processus sera suspendu jusqu'à ce que la condition de blocage soit levée (auquel cas le message sera envoyé et l'appel système réussira), ou que la file soit supprimée (auquel cas l'appel système échouera et errno contiendra EIDRM), ou que le processus reçoive un signal à intercepter (auquel cas l'appel système échouera et errno contiendra EINTR). Si l'appel réussit, la structure de file de messages sera mise à jour ainsi :
l'appel système msgrcv lit un message depuis la file indiquée par msqid dans la structure msgbuf pointée par l'argument msgp, en extrayant le message en cas de réussite. L'argument msgsz indique la taille maximale en octets du membre mtext de la structure pointée par l'argument msgp. Si le contenu du message est plus long que msgsz octets, et si l'argument msgflg contient MSG_NOERROR, alors le message sera tronqué (et la partie tronquée sera perdue). Sinon le message ne sera pas extrait de la file, et l'appel système échouera en indiquant E2BIG dans errno L'argument msgtyp indique le type de message désiré :
L'argument msgflg est composé d'un OU binaire ( | ) avec les options suivantes :
Si aucun message du type requis n'est disponible et si on n'a pas demandé IPC_NOWAIT dans msgflg, Le processus appelant est bloqué jusqu'à l'occurrence d'un des évènements suivants.
Si l'appel système réussit, la structure décrivant la file de messages est mise à jour comme suit :
Valeur RenvoyéeEn cas d'échec les deux appels systèmes renvoient -1 et errno contient le code d'erreur. Sinon msgsnd renvoie 0 et msgrvc renvoie le nombre d'octets copiés dans la table mtext.Erreursmsgsnd :
msgrcv :
NotesLes limites systèmes suivantes influent sur msgsnd :
ConformitéSVr4, SVID.NoteL'argument pointeur est déclaré comme un struct msgbuf * avec les bibliothèques libc4, libc5, glibc 2.0, glibc 2.1. Il est déclaré comme un void * (const void * pour msgsnd()) avec la bibliothèque glibc 2.2, suivant ainsi les spécifications SUSv2.Voir Aussiipc(5) , msgctl(2) , msgget(2) , msgrcv(2) , msgsnd(2) .
TraductionChristophe Blaess, 1997.
|