Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       msgctl - Contrôler les messages System V

SYNOPSIS

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

       int msgctl(int msqid, int cmd, struct msqid_ds *buf);

DESCRIPTION

       Cette  fonction  permet  d'effectuer  l'opération indiquée par cmd sur la file de messages
       System V ayant l'identifiant msqid.

       La structure msqid_ds est déclarée dans <sys/msg.h> comme suit :

           struct msqid_ds {
               struct ipc_perm msg_perm;   /* Propriétaire et droits */
               time_t          msg_stime;  /* Heure du dernier msgsnd(2) */
               time_t          msg_rtime;  /* Heure du dernier msgrcv(2) */
               time_t          msg_ctime;  /* Heure de création ou de
                                              modification avec msgctl() */
               unsigned long   msg_cbytes; /* nombre d'octets dans la file */
               msgqnum_t       msg_qnum;   /* nombre de messages dans la file */
               msglen_t        msg_qbytes; /* nombre maximal d'octets dans la file */
               pid_t           msg_lspid;  /* PID du dernier msgsnd(2) */
               pid_t           msg_lrpid;  /* PID du dernier msgrcv(2) */
           };

       Les champs de la structure msgid_ds sont les suivants :

       msg_perm   Il s'agit d'une structure ipc_perm (voir ci-dessous)  qui  indique  les  droits
                  d'accès à la file de messages.

       msg_stime  Heure du dernier appel système msgsnd(2).

       msg_rtime  Heure du dernier appel système msgrcv(2).

       msg_ctime  Heure de création de la file ou de la dernière opération IPC_SET de msgctl().

       msg_cbytes Nombre  d'octets de tous les messages actuellement dans la file de messages. Il
                  s'agit d'une extension Linux non standard qui n'est pas indiquée dans POSIX.

       msg_qnum   Nombre de messages actuellement dans la file de messages.

       msg_qbytes Nombre maximal d'octets de texte de message autorisés dans la file de messages.

       msg_lspid  Identifiant du processus qui a effectué le dernier appel système msgsnd(2).

       msg_lrpid  Identifiant du processus qui a effectué le dernier appel système msgrcv(2).

       La structure ipc_perm est définie de la façon suivante (les champs en  gras  peuvent  être
       modifiés en utilisant IPC_SET) :

           struct ipc_perm {
               key_t          __key;       /* Clé fournie à msgget(2) */
               uid_t          uid;         /* UID effectif du propriétaire */
               gid_t          gid;         /* GID effectif du propriétaire */
               uid_t          cuid;        /* UID effectif du créateur */
               gid_t          cgid;        /* GID effectif du créateur */
               unsigned short mode;        /* Permissions */
               unsigned short __seq;       /* Numéro de séquence */
           };

       Les  neuf  bits  de  poids  faible  du champ mode de la structure ipc_perm définissent les
       droits d'accès à la file de messages. Les bits de droits sont les suivants :

       0400   Lisible par l'utilisateur
       0200   Droit d'écriture pour l'utilisateur
       0040   Lisible par le groupe
       0020   Autorisation d'écriture pour le groupe
       0004   Lisible par les autres
       0002   Écrit par d'autres

       Les bits 0100, 0010 et 0001 (les bits d'exécution) sont inusités par le système.

       Les valeurs autorisées pour cmd sont :

       IPC_STAT
              Copier les informations depuis la structure de données  du  noyau  représentant  la
              file  de  messages identifiée par msqid dans la structure msqid_ds pointée par buf.
              L'appelant doit avoir des privilèges d'accès en lecture sur la file de messages.

       IPC_SET
              Écrire les valeurs de certains champs de la structure msqid_ds pointée par buf dans
              la  structure du noyau représentant la file de messages, en mettant à jour le champ
              msg_ctime.

              Les champs  suivants  de  la  structure  peuvent  être  mis  à  jour :  msg_qbytes,
              msg_perm.uid, msg_perm.gid et (les neuf bits de poids faible de) msg_perm.mode.

              L'UID  effectif  du  processus  appelant  doit  être  soit  celui  du  propriétaire
              (msg_perm.uid), soit celui du créateur (msg_perm.cuid) de la file de  messages,  ou
              bien  l'appelant  doit être privilégié. Des privilèges particuliers (sous Linux, la
              capacité CAP_SYS_RESOURCE) sont nécessaires pour augmenter la valeur de  msg_qbytes
              au‐dessus de la constante système MSGMNB.

       IPC_RMID
              Effacer  immédiatement  la  file  de  messages,  en  réveillant  tous les processus
              écrivant et lisant en attente. Ils obtiendront un code d'erreur et  errno  aura  la
              valeur EIDRM. Le processus appelant doit avoir les privilèges appropriés ou son UID
              effectif doit être celui du créateur ou du propriétaire de la file de messages.  Le
              troisième argument de msgctl() est dans ce cas ignoré.

       IPC_INFO (spécifique à Linux)
              Renvoyer  des  informations  sur  les limites et paramètres du système relatifs aux
              files de messages dans la structure pointée par buf. Cette structure  est  de  type
              msginfo  (ce  qui  nécessite un transtypage), qui est défini dans <sys/msg.h> si la
              macro de test de fonctionnalités _GNU_SOURCE est définie :

                  struct msginfo {
                      int msgpool; /* Taille en kibioctets du tampon utilisé
                                      pour stocker les données des messages.
                                      Non utilisé par le noyau */
                      int msgmap;  /* Nombre maximal d'entrées dans la table
                                      des messages. Non utilisé par le noyau */
                      int msgmax;  /* Nombre maximal d'octets pouvant être
                                      écrits dans un seul message */
                      int msgmnb;  /* Nombre maximal d'octets pouvant être
                                      écrits dans une file. Utilisé pour
                                      initialiser msg_qbytes lors de la
                                      création de la file (msgget(2)) */
                      int msgmni;  /* Nombre maximal de files de messages */
                      int msgssz;  /* Taille du segment de message.
                                      Non utilisé par le noyau */
                      int msgtql;  /* Nombre maximal de messages dans
                                      toutes les files du système.
                                      Non utilisé par le noyau */
                      unsigned short msgseg;
                                   /* Nombre maximal de segments.
                                      Non utilisé par le noyau */
                  };

              Les paramètres msgmni, msgmax et msgmnb peuvent être modifiés à l’aide des fichiers
              du même nom dans /proc. Consultez proc(5) pour plus de détails.

       MSG_INFO (spécifique à Linux)
              Renvoyer  une  structure  msginfo  contenant  les  mêmes  informations  comme  pour
              IPC_INFO, sauf que  les  champs  suivants  contiennent  des  informations  sur  les
              ressources  système  utilisées par des files de messages : le champ msgpool indique
              le nombre de files de messages existant actuellement  sur  le  système ;  le  champ
              msgmap  contient le nombre total de messages dans l'ensemble des files du système ;
              enfin le champ msgtql contient le nombre total d'octets dans tous les  messages  de
              toutes les files du système.

       MSG_STAT (spécifique à Linux)
              Renvoyer  une  structure  msqid_ds comme pour IPC_STAT. Cependant, l'argument msqid
              n'est pas l'identifiant d'une file, mais un index dans le tableau interne au  noyau
              qui contient des informations sur toutes les files de messages du système.

       MSG_STAT_ANY (spécifique à Linux, depuis Linux 4.17)
              Renvoyer  une structure msqid_ds comme pour MSG_STAT. Cependant, l'accès en lecture
              msg_perm.mode n'est pas vérifié pour l’accès en lecture de msqid, ce qui veut  dire
              que  n'importe quel utilisateur peut utiliser cette opération (tout comme n'importe
              quel utilisateur peut lire /proc/sysvipc/msg pour avoir les mêmes informations).

VALEUR RENVOYÉE

       Si elles réussissent, IPC_STAT, IPC_SET et IPC_RMID renvoient 0. Une opération IPC_INFO ou
       MSG_INFO  réussie  renvoie  le plus grand index d'élément utilisé dans la table interne du
       noyau contenant des informations sur les files de messages (cette  information  peut  être
       utilisée  par  des  opérations  MSG_STAT  ou  MSG_STAT_ANY  répétées  afin  d'obtenir  des
       informations sur toutes les files du système).  Une  opération  MSG_STAT  ou  MSG_STAT_ANY
       réussie renvoie l'identifiant de la file dont l'index était donné dans msqid.

       En cas d'erreur -1 est renvoyé, et errno contient le code d'erreur.

ERREURS

       En cas d'erreur, errno prend l'une des valeurs suivantes :

       EACCES L'argument  cmd équivaut à IPC_STAT ou MSG_STAT, mais le processus appelant n'a pas
              d'accès en lecture  sur  la  file  de  messages  msqid,  et  n'a  pas  la  capacité
              CAP_IPC_OWNER dans l'espace de noms utilisateur qui gère l'espace de noms IPC.

       EFAULT L'argument  cmd  a  pour valeur IPC_SET ou IPC_STAT, mais l’adresse pointée par buf
              est en dehors de l'espace d'adressage accessible.

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

       EINVAL cmd ou msqid ont une valeur  illégale.  Ou  alors,  dans  le  cas  d'une  opération
              MSG_STAT,  la  valeur  d’index indiquée par msqid pointe vers un élément de tableau
              qui n'est pas en cours d'utilisation.

       EPERM  L'argument cmd a pour valeur IPC_SET ou IPC_RMID, mais l'UID effectif du  processus
              appelant   n'est   pas  le  créateur  (comme  indiqué  dans  msg_perm.cuid)  ou  le
              propriétaire  (comme  indiqué  dans  msg_perm.uid)  de  la  file  de  messages,  et
              l'appelant n'est pas privilégié (sous Linux, il n'a pas la capacité CAP_SYS_ADMIN).

       EPERM  Il  a  été  tenté (via IPC_SET) d'augmenter msg_qbytes au-delà du paramètre système
              MSGMNB, mais l'appelant n'est pas privilégié (sous Linux, il n'a  pas  la  capacité
              CAP_SYS_RESOURCE).

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008, SVr4.

NOTES

       L'inclusion  de  <sys/types.h>  et  <sys/ipc.h>  n'est  pas nécessaire sous Linux et n'est
       exigée par  aucune  version  de  POSIX.  Cependant,  certaines  implémentations  anciennes
       nécessitent  l'inclusion  de  ces  fichiers  d'en-tête,  et  le  SVID documente aussi leur
       inclusion. Les applications  ayant  pour  but  d'être  portables  pourraient  inclure  ces
       fichiers d'en-tête.

       Les opérations IPC_INFO, MSG_STAT et MSG_INFO sont utilisées par le programme ipcs(1) pour
       fournir des informations sur les ressources allouées. À l'avenir, cela pourra être modifié
       ou remplacé par une interface avec le système de fichiers /proc.

       Divers champs de la structure struct msqid_ds étaient de type short sous Linux 2.2 et sont
       devenus de type  long  sous  Linux 2.4.  Pour  en  profiter,  une  recompilation  avec  la
       glibc 2.1.91  ou  ultérieure  devrait  suffire.  (Le noyau distingue les appels anciens et
       nouveaux par un drapeau IPC_64 dans cmd.)

VOIR AUSSI

       msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7), sysvipc(7)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot <david@tilapin.org> et Jean-Philippe MENGUAL
       <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à debian-l10n-french@lists.debian.org ⟨⟩.