Provided by: manpages-fr_4.23.1-1_all bug

NOM

       mq_overview – Aperçu des files de messages POSIX

DESCRIPTION

       Les  files de messages POSIX permettent aux processus d'échanger des données sous forme de
       messages. Cette API est distincte de celle fournie par  les  files  de  messages  System V
       (msgget(2), msgsnd(2), msgrcv(2), etc.), mais propose des fonctionnalités similaires.

       Les  files  de  messages  sont  créées et ouvertes en utilisant mq_open(3). Cette fonction
       renvoie un descripteur de file de messages (mqd_t), utilisé pour se référer à la  file  de
       messages ouverte dans les prochains appels. Chaque file de messages est distinguée par son
       nom sous la forme /un_nom ; c'est-à-dire un chaîne terminée par un caractère NULL  pouvant
       avoir  jusqu'à  NAME_MAX  caractères  (par exemple, 255), commençant par une barre oblique
       (« / ») suivie d'un caractère ou plus, aucun de ces derniers n'étant  une  barre  oblique.
       Deux processus peuvent opérer sur la même file en fournissant le même nom à mq_open(3).

       Les  messages  sont  transférés  à  une  file  et  récupérés  depuis une file en utilisant
       mq_send(3) et mq_receive(3). Lorsqu'un processus a fini d'utiliser la file, il la ferme en
       utilisant  mq_close(3),  et  lorsque  cette  file  n'est  plus  nécessaire, elle peut être
       supprimée avec mq_unlink(3). Les attributs de  la  file  peuvent  être  obtenus  et  (dans
       certains  cas)  modifiés  en  utilisant  mq_getattr(3) et mq_setattr(3). Un processus peut
       demander un avertissement asynchrone de l'arrivée d'un message  sur  une  file  auparavant
       vide en utilisant mq_notify(3).

       Un  descripteur  de  file  de  messages  est une référence à une description d'une file de
       messages ouverte (consulter open(2)). Après un appel à fork(2), un processus enfant hérite
       d’une  copie  des  descripteurs  de  file  de  messages de son parent, et ces descripteurs
       réfèrent aux  mêmes  descriptions  de  file  de  messages  ouverte  que  les  descripteurs
       correspondants  du  parent.  Les  descripteurs correspondants de file de messages des deux
       processus partagent les attributs (mq_flags) qui sont associés à la description de la file
       de messages ouverte.

       Chaque  message  contient une priorité associée, et les messages sont toujours délivrés au
       processus de réception par ordre de plus haute  priorité.  L'intervalle  de  priorité  des
       messages   va   de 0   (faible)   à   sysconf(_SC_MQ_PRIO_MAX) - 1   (haute).  Sur  Linux,
       sysconf(_SC_MQ_PRIO_MAX) renvoie 32768, mais POSIX.1-2001 n'exige des implémentations  que
       la  prise  en charge des priorités allant au moins de 0 à 31. Certaines implémentations ne
       proposent que cet intervalle.

       Le reste de cette section décrit certains détails spécifiques à l'implémentation Linux des
       files de messages POSIX.

   Interfaces de bibliothèque et appels système
       Dans  la  plupart  des  cas,  les interfaces de bibliothèque mq_*() listées ci-dessus sont
       implémentées au-dessus d'appels système sous-jacents du même nom. Les exceptions  à  cette
       règle sont indiquées dans le tableau ci‐dessous :

              Interface de bibliothèque   Appel système
              mq_close(3)                 close(2)
              mq_getattr(3)               mq_getsetattr(2)
              mq_notify(3)                mq_notify(2)
              mq_open(3)                  mq_open(2)
              mq_receive(3)               mq_timedreceive(2)
              mq_send(3)                  mq_timedsend(2)
              mq_setattr(3)               mq_getsetattr(2)
              mq_timedreceive(3)          mq_timedreceive(2)
              mq_timedsend(3)             mq_timedsend(2)
              mq_unlink(3)                mq_unlink(2)

   Versions
       Les files de messages POSIX ne sont gérées par Linux que depuis le noyau 2.6.6. La gestion
       n'a été ajoutée à la glibc que depuis la glibc 2.3.4.

   Configuration du noyau
       La gestion des files de messages POSIX est configurable via l'option de  configuration  du
       noyau CONFIG_POSIX_MQUEUE. Cette option est activée par défaut.

   Persistance
       Les  files  de messages POSIX persistent dans le noyau : si une file de messages n'est pas
       supprimée avec mq_unlink(3), elle existera jusqu'à l'extinction du système.

   Liaison
       Les programmes utilisant l'API des files de messages POSIX doivent être compilés  avec  cc
       -lrt pour être liés à la bibliothèque temps réel librt.

   /proc interfaces
       Les  interfaces  suivantes  peuvent  être utilisées pour limiter la quantité de mémoire du
       noyau utilisée par les files de messages POSIX et pour définir les  attributs  par  défaut
       pour de nouvelles files de message :

       /proc/sys/fs/mqueue/msg_default (depuis Linux 3.5)
              Ce  fichier  définit  la  valeur  utilisée par un nouveau réglage mq_maxmsg de file
              quand une file est créée avec un appel à mq_open(3) où attr est indiqué comme NULL.
              La  valeur  par  défaut pour ce fichier est 10. Le minimum et le maximum sont comme
              dans /proc/sys/fs/mqueue/msg_max. Une nouvelle valeur mq_maxmsg par défaut de  file
              sera  la  plus  petite  valeur entre msg_default et msg_max. Avant Linux 2.6.28, la
              valeur par défaut de mq_maxmsg était 10. De Linux 2.6.28 jusqu’à Linux 3.4, c’était
              la valeur définie de la limite msg_max.

       /proc/sys/fs/mqueue/msg_max
              Ce  fichier  peut  être utilisé pour visualiser et changer la valeur limite pour le
              nombre maximal de messages dans une file. Cette valeur agit comme un  plafond  pour
              le  paramètre attr->mq_maxmsg indiqué à mq_open(3). La valeur par défaut de msg_max
              vaut 10. La valeur minimale est de 1 (10 avant Linux 2.6.28).  La  valeur  maximale
              vaut  HARD_MSGMAX.  La  limite  msg_max  est ignorée pour les processus privilégiés
              (CAP_SYS_RESOURCE), mais la limite HARD_MSGMAX reste néanmoins imposée.

              La définition de HARD_MSGMAX a changé au cours des versions du noyau :

              -  jusqu’à Linux 2.6.32 : 131072 / sizeof(void *)

              -  Linux 2.6.33 à Linux 3.4 : (32768 * sizeof(void *) / 4)

              -  depuis Linux 3.5 : 65 536.

       /proc/sys/fs/mqueue/msgsize_default (depuis Linux 3.5)
              Ce fichier définit la valeur utilisée pour un nouveau réglage de mq_msgsize de file
              quand  celle-ci est créée par un appel à mq_open(3) où attr est indiqué comme NULL.
              La valeur par défaut pour ce fichier est 8192 (octets). Le minimum  et  le  maximum
              sont   comme   dans   /proc/sys/fs/mqueue/msgsize_max.  Si  msgsize_default  excède
              msgsize_max, une nouvelle  valeur  par  défaut  de  mq_msgsize  pour  la  file  est
              plafonnée  à  la  limite  msgsize_max.  Avant Linux 2.6.28, la valeur par défaut de
              mq_msgsize était 8192. De Linux 2.6.28 jusqu’à  Linux 3.4,  elle  était  la  valeur
              définie de la limite msgsize_max.

       /proc/sys/fs/mqueue/msgsize_max
              Ce  fichier  peut  être  utilisé pour visualiser et modifier la limite de la taille
              maximale des messages. Cette  valeur  agit  comme  un  plafond  pour  le  paramètre
              attr->mq_msgsize  indiqué  à mq_open(3). La valeur par défaut de msgsize_max est de
              8192 octets. La valeur minimale est 128 (8192 pour les noyaux antérieurs à 2.6.28).
              La valeur maximale pour msg_max à variée selon les versions du noyau.

              -  avant Linux 2.6.28, la valeur maximale était INT_MAX ;

              -  de Linux 2.6.28 jusqu’à Linux 3.4, la limite était 1 048 576 ;

              -  depuis Linux 3.5, la limite est 16 777 216 (HARD_MSGSIZEMAX).

              La    limite    msgsize_max    est   ignorée   pour   les   processus   privilégiés
              (CAP_SYS_RESOURCE), mais, depuis Linux 3.5, le plafond HARD_MSGSIZEMAX  est  imposé
              aux processus privilégiés.

       /proc/sys/fs/mqueue/queues_max
              Ce  fichier peut être utilisé pour visualiser et modifier la limite pour le système
              entier du nombre de files de messages qui peuvent être créées. La valeur par défaut
              de  queues_max  est  256. Aucun plafond n’est imposé pour la limite queues_max. Les
              processus privilégiés (CAP_SYS_RESOURCE) peuvent dépasser cette limite  (mais  voir
              BOGUES).

   Limitation des ressources
       La  limitation  des  ressources  RLIMIT_MSGQUEUE,  qui  indique une limite sur la quantité
       d'espace  qui  peut  être  utilisé  par  toutes  les  files  de  messages  appartenant   à
       l'identifiant utilisateur réel du processus, est décrite dans getrlimit(2).

   Monter le système de fichiers des files de messages
       Sous  Linux,  les  files  de  messages  sont  créées  dans un système de fichiers virtuel.
       (D'autres implémentations peuvent également fournir une  telle  fonctionnalité,  mais  les
       détails  sont  probablement  différents.)  Ce  système de fichiers peut être monté (par le
       superutilisateur) en utilisant les commandes suivantes :

           # mkdir /dev/mqueue
           # mount -t mqueue none /dev/mqueue

       Le « sticky bit » est automatiquement activé sur le répertoire de montage.

       Une fois le système de fichiers monté, les files de messages sur le système  peuvent  être
       visualisées  et  manipulées  avec les commandes utilisées habituellement pour les fichiers
       (par exemple, ls(1) et rm(1)).

       Le contenu de chaque fichier dans le répertoire est composé d'une  seule  ligne  contenant
       les informations sur la file :

           $ cat /dev/mqueue/mymq
           QSIZE:129     NOTIFY:2    SIGNO:0    NOTIFY_PID:8260

       Ces champs ont les caractéristiques suivantes :

       QSIZE  Nombre d'octets de données dans tous les messages de la file (mais voir BOGUES).

       NOTIFY_PID
              Si   différent  de  zéro,  alors  le  processus  avec  cet  identifiant  a  utilisé
              mq_notify(3) pour s'enregistrer pour les notifications asynchrones de messages,  et
              les champs suivants décrivent comment ces notifications se produisent.

       NOTIFY Méthode  de  notification :  0  pour  SIGEV_SIGNAL,  1  pour  SIGEV_NONE  et 2 pour
              SIGEV_THREAD.

       SIGNO  Numéro de signal à utiliser pour SIGEV_SIGNAL.

   Implémentation de Linux des descripteurs de files de messages
       Sous Linux, un descripteur de file de messages est  en  fait  un  descripteur  de  fichier
       (POSIX  n’exige  pas une telle implémentation). Cela signifie qu’un descripteur de file de
       messages peut être contrôlé avec select(2), poll(2) ou epoll(7). Cela n'est pas portable.

       Le  drapeau  « close-on-exec »  (voir  open(2))  est  automatiquement  positionné  sur  le
       descripteur de fichier renvoyé par mq_open(2).

   Espaces de noms IPC
       Pour  une  discussion  sur l’interaction entre les objets de file de messages POSIX et les
       espaces de noms IPC, consulter ipc_namespaces(7).

NOTES

       Les files de messages System V (msgget(2), msgsnd(2), msgrcv(2), etc.) sont  une  ancienne
       API d'échange de messages entre les processus. Les files de messages POSIX fournissent une
       interface mieux conçue. Cependant, les  files  de  messages  POSIX  sont  moins  largement
       disponibles (en particulier sur les anciens systèmes) que les files de messages System V.

       Actuellement  (Linux 2.6.26),  Linux  ne  gère  pas  l'utilisation  des listes de contrôle
       d'accès (ACL : Access Control List) des files de messages POSIX.

BOGUES

       Depuis Linux 3.5 jusqu’à Linux 3.14, le noyau imposait un plafond de 1024 (HARD_QUEUESMAX)
       pour  la  valeur  à laquelle la limite queues_max pouvait être élevée, et ce plafond était
       imposé même pour les processus privilégiés. Ce plafond a été supprimé dans  Linux 3.14  et
       des correctifs pour Linux 3.5.x jusqu’à Linux 3.13.x ont aussi supprimé ce plafond.

       Comme  originellement  implémenté  (et  documenté), le champ QSIZE affiche le nombre total
       d’octets (fournis  par  l’utilisateur)  dans  tous  les  messages  de  la  file.  Certains
       changements  dans Linux 3.5 ont malencontreusement modifié ce comportement de façon que ce
       champ inclut un compte d’octets d’en-têtes du noyau utilisés  pour  stocker  les  messages
       dans la file. Cette régression comportementale a été rectifiée dans Linux 4.2 (et dans les
       séries stables antérieures), de telle façon que le compte  de  nouveau  n'inclut  que  les
       octets de données utilisateur des messages dans la file.

EXEMPLES

       Un  exemple  d'utilisation  des différentes fonctions des files de messages est disponible
       dans mq_notify(3).

VOIR AUSSI

       getrlimit(2),   mq_getsetattr(2),   poll(2),   select(2),   mq_close(3),    mq_getattr(3),
       mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), epoll(7), namespaces(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-Paul  Guillonneau
       <guillonneau.jeanpaul@free.fr>

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