MSGOP(2)           Manuel du programmeur Linux           MSGOP(2)


NOM
       msgop, 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, int msgsz,       int msgflg)

       int msgrcv (int msqid, struct msgbuf *  msgp,  int  msgsz,       long msgtyp, int msgflg)

DESCRIPTION
       Pour 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 etre 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 condi­
       tion 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 :



Linux                    19 Juillet 1997                        1





MSGOP(2)           Manuel du programmeur Linux           MSGOP(2)


              msg_lspid contient le PID du processus appelant.

              msg_qnum est incrémenté de 1.

              msg_stime est rempli avec l'heure actuelle.

       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é :

              Si msgtyp vaut 0, le premier message est lu.

              Si  msgtyp est supérieur à 0, alors le premier mes­
              sage de type msgtyp est extrait  de  la  file.   Si
              msgflg  contient MSG_EXCEPT l'inverse est effectué,
              le premier message de type différent de msgtyp  est
              extrait de la file.

              Si  msgtyp est inférieur à 0, le premier message de
              la file avec un type inférieur ou égal à la  valeur
              absolue de msgtyp est extrait.

       L'argument  msgflg  est composé d'un OU binaire ( | ) avec
       les options suivantes :

              IPC_NOWAIT Si aucun message du  type  desiré  n'est
              présent, l'appel système échoue et errno est fixé à
              ENOMSG.

              MSG_EXCEPT Utilisé avec msgtyp supérieur à  0  pour
              lire les messages de type différent de msgtyp.

              MSG_NOERROR  Tronque  silencieusement  les messages
              trop longs

       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.

              Un message du type désiré arrive dans la file.

              La file de messages est supprimée.  L'appel système



Linux                    19 Juillet 1997                        2





MSGOP(2)           Manuel du programmeur Linux           MSGOP(2)


              échoue et errno contient EIDRM.

              Le processus appelant reçoit  un  signal  à  inter­
              cepter.   L'appel  système échoue et errno contient
              EINTR.

       Si l'appel système réussit, la structure décrivant la file
       de messages est mise à jour comme suit :

              msg_lrpid  est  rempli  avec  le  PID  du processus
              appelant.

              msg_qnum est décrémenté de 1

              msg_rtime est rempli avec l'heure actuelle.

VALEUR RENVOYÉE
       En 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.

ERREURS
       msgsnd :

       EAGAIN     Le message n'a pas pu être envoyé à cause de la
                  limite msg_qbytes pour la file et de la requête
                  IPC_NOWAIT dans mgsflg.

       EACCES     le processus appelant n'a pas de permissions de
                  lecture dans la file.

       EFAULT     msgp pointe en dehors de  l'espace  d'adressage
                  accessible.

       EIDRM      La file de message a été supprimée

       EINTR      Un  signal  est  arrivé avant d'avoir pu écrire
                  quoi que ce soit.

       EINVAL     msqid ou mtype ou msgsz sont invalides.

       ENOMEM     pas assez de mémoire pour le noyau.

       msgrcv :

       E2BIG  message trop long, et MSG_NOERROR n'a pas été  req­
              uis.

       EACCES Le processus appelant n'a pas de permission de lec­
              ture dans la file.

       EFAULT msgp  pointe  en  dehors  de  l'espace  d'adressage
              accessible.



Linux                    19 Juillet 1997                        3





MSGOP(2)           Manuel du programmeur Linux           MSGOP(2)


       EIDRM  La file de messages a été supprimée.

       EINTR  Un signal est arrivé avant d'avoir pu lire quoi que
              ce soit.

       EINVAL msgqid ou msgsz invalides.

       ENOMSG IPC_NOWAIT a été requis et aucun  message  du  type
              reclamé n'existe dans la file.

NOTES
       Les limites systèmes suivantes influent sur msgsnd :

       MSGMAX     Taille  maximum d'un message : l'implémentation
                  Linux 0.99.13 fixe cette limite à 4080 bytes.

       MSGMNB     Taille maximale d'une file  de  messages.  Peut
                  être augmentée par le Super-User.

CONFORMITÉ
       SVr4, SVID.

VOIR AUSSI
       ipc(5), msgctl(2), msgget(2), msgrcv(2), msgsnd(2).


TRADUCTION
       Christophe Blaess, 1997.





























Linux                    19 Juillet 1997                        4