Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

       msgctl - Contrôler les messages System V

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #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 msqid_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'échec, la valeur de retour est -1 et errno est défini pour préciser l'erreur.

ERREURS

       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).

STANDARDS

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

NOTES

       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)

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⟩.