Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       msgrcv, msgsnd - Operations sur les messages

SYNOPSIS

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>

       int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

       ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
                      int msgflg);

DESCRIPTION

       Les  appels  systeme  msgsnd()  et  msgrcv()  servent  respectivement a
       envoyer et a recevoir des messages d'une file de messages. Le processus
       appelant  doit avoir une permission d'ecriture sur la file pour envoyer
       un message, et une permission de lecture pour en recevoir un.

       L'argument  msgp  est  un  pointeur  vers  une  structure  definie  par
       l'appelant de forme generale suivante :

           struct msgbuf {
               long mtype;       /* type de message, doit etre > 0 */
               char mtext[1];    /* contenu du message */
           };

       Le  champ  mtext  est  un  tableau  ou autre structure de taille msgsz,
       valeur entiere positive ou nulle. Les message  de  taille  nulle  (sans
       champ  mtext)  sont  autorises.  Le  membre mtype doit avoir une valeur
       strictement positive qui puisse etre utilisee par le processus  lecteur
       pour  la  selection  de  messages  (voir  la  description de msgrcv ci-
       dessous).

   msgsnd()
       L'appel systeme  msgsnd()  insere  une  copie  du  message  pointe  par
       l'argument  msgp  dans  la  file  dont l'identifiant est indique par la
       valeur de l'argument msqid.

       S'il y a assez de place dans la file, msgsnd()  reussit  immediatement.
       (La  capacite  de  la  file  est  definie par le champ msg_qbytes de la
       structure associee a la file de messages.  Durant  la  creation  de  la
       file,  ce  champ est initialise a MSGMNB octets, mais cette limite peut
       etre modifiee avec msgctl(2).) S'il n'y a pas assez de place, alors  le
       comportement  par  defaut  de  msgsnd()  est de bloquer jusqu'a obtenir
       suffisamment d'espace. En indiquant IPC_NOWAIT dans l'argument  msgflg,
       le message ne sera pas envoye et l'appel systeme echouera en retournant
       EAGAIN dans errno.

       Un appel a msgsnd() bloque peut echouer si :

       * la file est supprimee, auquel cas l'appel systeme echoue  avec  errno
         valant EIDRM ; ou

       * un  signal  a  ete intercepte, auquel cas l'appel systeme echoue avec
         errno valant EINTR ;  consultez  signal(7).  (msgsnd()  n'est  jamais
         relance  automatiquement  apres  interruption  par un gestionnaire de
         signal, quelle que  soit  la  configuration  de  SA_RESTART  lors  de
         l'installation du gestionnaire.)

       Si  l'appel systeme reussit, la structure decrivant la file de messages
       est mise a jour comme suit :

              msg_lspid contient le PID du processus appelant.

              msg_qnum est incremente de 1.

              msg_stime est rempli avec l'heure actuelle.

   msgrcv()
       L'appel systeme msgrcv() supprime un message depuis  la  file  indiquee
       par msqid et le place dans le tampon pointe par msgp.

       L'argument  msgsz  indique la taille maximale en octets du membre mtext
       de la structure pointee par l'argument msgp. Si le contenu  du  message
       est  plus  long que msgsz octets, le comportement depend de la presence
       ou non de MSG_NOERROR dans msgflg. Si MSG_NOERROR est  specifie,  alors
       le  message  sera  tronque  (et  la  partie  tronquee sera perdue) ; si
       MSG_NOERROR n'est pas specifie, le message ne sera pas  extrait  de  la
       file, et l'appel systeme echouera en renvoyant -1 et en indiquant E2BIG
       dans errno

       L'argument msgtyp indique le type de message desire :

       * Si msgtyp vaut 0, le premier message est lu.

       * Si msgtyp est superieur a 0, alors le premier message de type  msgtyp
         est  extrait  de la file. Si msgflg contient MSG_EXCEPT l'inverse est
         effectue, le premier message de type different de msgtyp est  extrait
         de la file.

       * Si  msgtyp  est  inferieur a 0, le premier message de la file avec un
         type inferieur ou egal a la valeur absolue de msgtyp est extrait.

       L'argument msgflg est compose d'un OU binaire << | >> avec les  options
       suivantes :

       IPC_NOWAIT
              Retourne  immediatement  si  aucun  message du type desire n'est
              present dans la file. L'appel systeme echoue et errno est fixe a
              ENOMSG.

       MSG_EXCEPT
              Utilise avec msgtyp superieur a 0 pour lire les messages de type
              different de msgtyp.

       MSG_NOERROR
              Tronque  silencieusement  les  messages  plus  longs  que  msgsz
              octets.

       Si  aucun  message  du  type  requis  n'est disponible et si on n'a pas
       demande IPC_NOWAIT  dans  msgflg,  le  processus  appelant  est  bloque
       jusqu'a l'occurrence d'un des evenements suivants :

       * Un message du type desire arrive dans la file.

       * La  file  de  messages est supprimee. L'appel systeme echoue et errno
         contient EIDRM.

       * Le processus appelant intercepte  un  signal.  Dans  ce  cas  l'appel
         systeme  echoue  avec  errno  valant  EINTR.  (msgrcv()  n'est jamais
         relance automatiquement apres interruption  par  un  gestionnaire  de
         signal,  quelle  que  soit  la  configuration  de  SA_RESTART lors de
         l'installation du gestionnaire.)

       Si l'appel systeme reussit, la structure decrivant la file de  messages
       est mise a jour comme suit :

              msg_lrpid est rempli avec le PID du processus appelant.

              msg_qnum est decremente de 1.

              msg_rtime est rempli avec l'heure actuelle.

VALEUR RENVOY'EE

       En  cas  d'echec les deux appels systeme renvoient -1 et errno contient
       le code d'erreur. Sinon msgsnd()  renvoie  0  et  msgrcv()  renvoie  le
       nombre d'octets copies dans la table mtext.

ERREURS

       En cas d'echec de msgsnd(), errno aura l'une des valeurs suivantes :

       EACCES Le  processus appelant n'a pas de permissions d'ecriture dans la
              file et n'a pas la capacite CAP_IPC_OWNER.

       EAGAIN Le message  n'a  pas  pu  etre  envoye  a  cause  de  la  limite
              msg_qbytes pour la file et de la requete IPC_NOWAIT dans msgflg.

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

       EIDRM  La file de messages a ete supprimee.

       EINTR  Un signal est arrive avant d'avoir pu ecrire quoi que ce soit.

       EINVAL msqid  est  invalide,  ou  bien mtype n'est pas positif, ou bien
              msgsz est invalide (negatif ou superieur a la valeur  MSGMAX  du
              systeme).

       ENOMEM Le  systeme  n'a  pas  assez  de  memoire pour copier le message
              pointe par msgp.

       En cas d'echec de msgrcv(), errno prend l'une des valeurs suivantes :

       E2BIG  Le message est plus long que msgsz, et MSG_NOERROR n'a  pas  ete
              indique dans msgflg.

       EACCES Le  processus  appelant n'a pas de permission de lecture dans la
              file et n'a pas la capacite CAP_IPC_OWNER.

       EAGAIN Aucun message n'est disponible dans la file, et  IPC_NOWAIT  est
              specifie dans msgflg.

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

       EIDRM  La  file  de  messages  a  ete  supprimee alors que le processus
              attendait un message.

       EINTR  Un signal est arrive avant d'avoir pu lire quoi  que  ce  soit ;
              consultez signal(7).

       EINVAL msgqid ou msgsz invalides.

       ENOMSG IPC_NOWAIT  a  ete  requis  dans msgflg et aucun message du type
              reclame n'existe dans la file.

CONFORMIT'E

       SVr4, POSIX.1-2001.

NOTES

       L'argument  msgp  est  declare  comme  un  struct  msgbuf  *  avec  les
       bibliotheques  libc4, libc5, glibc 2.0, glibc 2.1. Il est declare comme
       un  void  *  avec  la  bibliotheque  glibc  2.2,  suivant   ainsi   les
       specifications SUSv2 et SUSv3.

       Les  limites  systeme  concernant  les  files  de messages et affectant
       msgsnd() sont :

       MSGMAX Taille maximale d'un message : 8192 octets  (sous  Linux,  cette
              limite   peut   etre   lue   et   modifiee   grace   au  fichier
              /proc/sys/kernel/msgmax).

       MSGMNB Taille maximale, en  octets,  d'une  file  de  messages :  16384
              octets  (sous  Linux,  elle  peut  etre lue et modifiee grace au
              fichier  /proc/sys/kernel/msgmnb).  Le   superutilisateur   peut
              augmenter  la taille d'une file de messages au-dela de MSGMNB en
              utilisant l'appel systeme msgctl(2).

       L'implementation des files de messages sous Linux  n'a  pas  de  limite
       intrinseque  pour  le nombre maximal d'en-tetes de messages (MSGTQL) et
       la taille maximale, en octets, de l'ensemble de tous les  messages  sur
       le systeme (MSGPOOL).

VOIR AUSSI

       msgctl(2), msgget(2), capabilities(7), mq_overview(7), svipc(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone       au       sein        du        projet        perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe  Blaess  <URL:http://www.blaess.fr/christophe/> (1996-2003),
       Alain  Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).    Julien
       Cristau et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.