plucky (7) mq_overview.7.gz

Provided by: manpages-fr_4.25.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⟩.