Loading

NOM

       msgctl - Contrôler les messages

SYNOPSIS

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

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

       Cette  fonction  permet d’effectuer l’opération indiquée par cmd sur la
       file de messages 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 permissions */
               time_t          msg_stime;    /* Heure du dernier msgsnd(2) */
               time_t          msg_rtime;    /* Heure du dernier msgrcv(2) */
               time_t          msg_ctime;    /* Heure de dernière modification */
               unsigned long   __msg_cbytes; /* Nombre actuel d’octets dans la file
                                               (non standard) */
               msgqnum_t       msg_qnum;     /* Nombre actuel de messages
                                               dans la file */
               msglen_t        msg_qbytes;   /* Nombre maximal d’octets
                                               autorisés dans la file */
               pid_t           msg_lspid;    /* PID du dernier msgsnd(2) */
               pid_t           msg_lrpid;    /* PID du dernier msgrcv(2) */
           };

       La structure ipc_perm est définie dans <sys/ipc.h> 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 valeurs autorisées pour cmd sont :

       IPC_STAT
              Copier les informations depuis la structure 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 la valeur 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 9  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_IPC_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 et ses structures de
              données, en réveillant tous les processus écrivains et  lecteurs
              en  attente.  Ils obtiendront un code d’erreur, et errno aura la
              valeur EIDRM. L’UID effectif du  processus  appelant  doit  être
              celui  du créateur ou du propriétaire de la file de messages, ou
              bien le processus appelant doit être privilégié.

       IPC_INFO (spécifique à Linux)
              Renvoie 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
              _GNU_SOURCE est définie :

                  struct msginfo {
                      int msgpool; /* Taille en kibi-octets du tampon utilisé
                                      pour stocker les données des messages ;
                                      pas utilisé par le noyau */
                      int msgmap;  /* Nombre maximal d’entrées dans la table
                                      des messages ; pas 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 message */
                      int msgssz;  /* Taille du segment de message ;
                                      pas utilisé par le noyau */
                      int msgtql;  /* Nombre maximal de messages dans toutes les files
                                      du système ; pas utilisé par le noyau */
                      unsigned short int msgseg;
                                   /* Nombre maximal de segments ;
                                      pas utilisé par le noyau */
                  };

              Les paramètres msgmni, msgmax et msgmnb  peuvent  être  modifiés
              via  les fichiers du même nom dans /proc. Voir proc(5) pour plus
              de détails.

       MSG_INFO (Spécifique à Linux)
              Renvoie une structure msginfo contenant les  mêmes  informations
              que  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)
              Renvoie une structure msqid_ds comme pour  IPC_STAT.  Cependant,
              l’argument  msqid  n’est  pas  l’identifiant d’une file, mais un
              indice dans  le  tableau  interne  au  noyau  qui  contient  des
              informations sur toutes les files de messages du système.

VALEUR RENVOYÉE

       Si  elles  réussissent,  les  opérations  IPC_STAT, IPC_SET et IPC_RMID
       renvoient 0. Une opération IPC_INFO ou MSG_INFO réussie renvoie le plus
       grand  indice  d’un  é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 répétées afin d’obtenir
       des informations  sur  toutes  les  files  du  système.  Une  opération
       MSG_STAT  réussie  renvoie l’identifiant de la file dont l’indice é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 réclame l’opération 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.

       EFAULT L’argument cmd réclame l’opération IPC_SET ou IPC_STAT mais  buf
              pointe 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 indiquée  par  msqid  pointe
              vers un élément de tableau qui n’est pas en cours d’utilisation.

       EPERM  L’argument cmd réclame  l’opération  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 le
              processus n’est pas  privilégié  (sous  Linux,  il  n’a  pas  la
              capacité CAP_SYS_ADMIN).

CONFORMITÉ

       SVr4, POSIX.1-2001.

NOTES

       Les  appels  IPC_INFO,  MSG_STAT  et  MSG_INFO  sont  utilisés  par  le
       programme ipcs(8) pour fournir  des  informations  sur  les  ressources
       allouées.  À  l’avenir,  ceci  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),
       svipc(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.23 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

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

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».