dwww Home | Manual pages | Find package

msgctl(2)                     System Calls Manual                    msgctl(2)

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 in-
                  dique 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 stan-
                  dard 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 ca-
              pacité CAP_SYS_RESOURCE) sont nécessaires pour augmenter la  va-
              leur 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 appe-
              lant 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 sys-
              tè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 msg-
              map contient le nombre total de  messages  dans  l'ensemble  des
              files  du système ; enfin le champ msgtql contient le nombre to-
              tal d'octets dans tous les messages de toutes les files du  sys-
              tè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 in-
              dex  dans  le tableau interne au noyau qui contient des informa-
              tions 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  utili-
              sateur  peut utiliser cette opération (tout comme n'importe quel
              utilisateur peut lire /proc/sysvipc/msg pour avoir les mêmes in-
              formations).

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 informa-
       tions 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 proces-
              sus 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 acces-
              sible.

       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'uti-
              lisation.

       EPERM  L'argument cmd a pour valeur IPC_SET ou IPC_RMID, mais l'UID ef-
              fectif du processus appelant n'est pas le créateur (comme  indi-
              qué  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  al-
       louées. À l'avenir, cela pourra être modifié ou remplacé par une inter-
       face 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 dra-
       peau IPC_64 dans cmd.)

VOIR AUSSI
       msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7),  sys-
       vipc(7)

TRADUCTION
       La  traduction française de cette page de manuel a été créée par Chris-
       tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <ste-
       phan.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.cou-
       lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>,  Thomas  Huriaux
       <thomas.huriaux@gmail.com>,  Nicolas François <nicolas.francois@centra-
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon  Paillard  <si-
       mon.paillard@resel.enst-bretagne.fr>,    Denis   Barbier   <barbier@de-
       bian.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⟩.

Pages du manuel de Linux 6.03  15 décembre 2022                      msgctl(2)

Generated by dwww version 1.15 on Sat Jun 29 01:33:38 CEST 2024.