.\" -*- coding: UTF-8 -*-
'\" t
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH mq_overview 7 "17 mai 2025" "Pages du manuel de Linux 6.15"
.SH NOM
mq_overview – Aperçu des files de messages POSIX
.SH 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 (\fBmsgget\fP(2), \fBmsgsnd\fP(2), \fBmsgrcv\fP(2), etc.),
mais propose des fonctionnalités similaires.
.P
Les files de messages sont créées et ouvertes en utilisant
\fBmq_open\fP(3). Cette fonction renvoie un \fIdescripteur de file de messages\fP
(\fImqd_t\fP), 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 \fI/un_nom\fP ; c'est\-à\-dire un chaîne terminée par un caractère NULL
pouvant avoir jusqu'à \fBNAME_MAX\fP 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 à \fBmq_open\fP(3).
.P
Les messages sont transférés à une file et récupérés depuis une file en
utilisant \fBmq_send\fP(3) et \fBmq_receive\fP(3). Lorsqu'un processus a fini
d'utiliser la file, il la ferme en utilisant \fBmq_close\fP(3), et lorsque
cette file n'est plus nécessaire, elle peut être supprimée avec
\fBmq_unlink\fP(3). Les attributs de la file peuvent être obtenus et (dans
certains cas) modifiés en utilisant \fBmq_getattr\fP(3) et \fBmq_setattr\fP(3). Un
processus peut demander un avertissement asynchrone de l'arrivée d'un
message sur une file auparavant vide en utilisant \fBmq_notify\fP(3).
.P
Un descripteur de file de messages est une référence à une \fIdescription d'une file de messages ouverte\fP (consulter \fBopen\fP(2)). Après un appel à
\fBfork\fP(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 (\fImq_flags\fP) qui sont associés à la
description de la file de messages ouverte.
.P
Chaque message contient une \fIpriorité\fP 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) à
\fIsysconf(_SC_MQ_PRIO_MAX)\ \-\ 1\fP (haute). Sur Linux,
\fIsysconf(_SC_MQ_PRIO_MAX)\fP 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.
.P
Le reste de cette section décrit certains détails spécifiques à
l'implémentation Linux des files de messages POSIX.
.SS "Interfaces de bibliothèque et appels système"
Dans la plupart des cas, les interfaces de bibliothèque \fBmq_*\fP() 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\(hydessous\ :
.RS
.TS
lB lB
l l.
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)
.TE
.RE
.SS 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.
.SS "Configuration du noyau"
La gestion des files de messages POSIX est configurable via l'option de
configuration du noyau \fBCONFIG_POSIX_MQUEUE\fP. Cette option est activée par
défaut.
.SS Persistance
Les files de messages POSIX persistent dans le noyau\ : si une file de
messages n'est pas supprimée avec \fBmq_unlink\fP(3), elle existera jusqu'à
l'extinction du système.
.SS Liaison
Les programmes utilisant l'API des files de messages POSIX doivent être
compilés avec \fIcc \-lrt\fP pour être liés à la bibliothèque temps réel
\fIlibrt\fP.
.SS "/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\ :
.TP
\fI/proc/sys/fs/mqueue/msg_default\fP (depuis Linux 3.5)
Ce fichier définit la valeur utilisée par un nouveau réglage \fImq_maxmsg\fP de
file quand une file est créée avec un appel à \fBmq_open\fP(3) où \fIattr\fP est
indiqué comme NULL. La valeur par défaut pour ce fichier est 10. Le minimum
et le maximum sont comme dans \fI/proc/sys/fs/mqueue/msg_max\fP. Une nouvelle
valeur \fImq_maxmsg\fP par défaut de file sera la plus petite valeur entre
\fImsg_default\fP et \fImsg_max\fP. Avant Linux 2.6.28, la valeur par défaut de
\fImq_maxmsg\fP était 10. De Linux 2.6.28 jusqu’à Linux 3.4, c’était la valeur
définie de la limite \fImsg_max\fP.
.TP
\fI/proc/sys/fs/mqueue/msg_max\fP
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 \fIattr\->mq_maxmsg\fP indiqué à \fBmq_open\fP(3). La
valeur par défaut de \fImsg_max\fP vaut 10. La valeur minimale est de 1 (10
avant Linux 2.6.28). La valeur maximale vaut \fBHARD_MSGMAX\fP. La limite
\fImsg_max\fP est ignorée pour les processus privilégiés (\fBCAP_SYS_RESOURCE\fP),
mais la limite \fBHARD_MSGMAX\fP reste néanmoins imposée.
.IP
La définition de \fBHARD_MSGMAX\fP a changé au cours des versions du noyau :
.RS
.IP \- 3
jusqu’à Linux 2.6.32 : \fI131072\ /\ sizeof(void\ *)\fP
.IP \-
Linux 2.6.33 à Linux 3.4 : \fI(32768\ *\ sizeof(void\ *) / 4)\fP
.IP \-
.\" commit 5b5c4d1a1440e94994c73dddbad7be0676cd8b9a
depuis Linux 3.5 : 65 536.
.RE
.TP
\fI/proc/sys/fs/mqueue/msgsize_default\fP (depuis Linux 3.5)
Ce fichier définit la valeur utilisée pour un nouveau réglage de
\fImq_msgsize\fP de file quand celle\-ci est créée par un appel à \fBmq_open\fP(3)
où \fIattr\fP est indiqué comme NULL. La valeur par défaut pour ce fichier est
8192 (octets). Le minimum et le maximum sont comme dans
\fI/proc/sys/fs/mqueue/msgsize_max\fP. Si \fImsgsize_default\fP excède
\fImsgsize_max\fP, une nouvelle valeur par défaut de \fImq_msgsize\fP pour la file
est plafonnée à la limite \fImsgsize_max\fP. Avant Linux 2.6.28, la valeur par
défaut de \fImq_msgsize\fP était 8192. De Linux 2.6.28 jusqu’à Linux 3.4, elle
était la valeur définie de la limite \fImsgsize_max\fP.
.TP
\fI/proc/sys/fs/mqueue/msgsize_max\fP
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 \fIattr\->mq_msgsize\fP indiqué à \fBmq_open\fP(3). La valeur par
défaut de \fImsgsize_max\fP est de 8192 octets. La valeur minimale est 128
(8192 pour les noyaux antérieurs à 2.6.28). La valeur maximale pour
\fImsg_max\fP à variée selon les versions du noyau.
.RS
.IP \- 3
avant Linux 2.6.28, la valeur maximale était \fBINT_MAX\fP ;
.IP \-
de Linux 2.6.28 jusqu’à Linux 3.4, la limite était 1 048 576 ;
.IP \-
depuis Linux 3.5, la limite est 16 777 216 (\fBHARD_MSGSIZEMAX\fP).
.RE
.IP
La limite \fImsgsize_max\fP est ignorée pour les processus privilégiés
(\fBCAP_SYS_RESOURCE\fP), mais, depuis Linux 3.5, le plafond \fBHARD_MSGSIZEMAX\fP
est imposé aux processus privilégiés.
.TP
\fI/proc/sys/fs/mqueue/queues_max\fP
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 \fIqueues_max\fP est 256. Aucun plafond n’est imposé pour
la limite \fIqueues_max\fP. Les processus privilégiés (\fBCAP_SYS_RESOURCE\fP)
peuvent dépasser cette limite (mais voir BOGUES).
.SS "Limitation des ressources"
La limitation des ressources \fBRLIMIT_MSGQUEUE\fP, 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
\fBgetrlimit\fP(2).
.SS "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\ :
.P
.in +4n
.EX
#\fB mkdir /dev/mqueue\fP
#\fB mount \-t mqueue none /dev/mqueue\fP
.EE
.in
.P
Le «\ sticky bit\ » est automatiquement activé sur le répertoire de montage.
.P
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, \fBls\fP(1) et \fBrm\fP(1)).
.P
Le contenu de chaque fichier dans le répertoire est composé d'une seule
ligne contenant les informations sur la file\ :
.P
.in +4n
.EX
$\fB cat /dev/mqueue/mymq\fP
QSIZE:129 NOTIFY:2 SIGNO:0 NOTIFY_PID:8260
.EE
.in
.P
Ces champs ont les caractéristiques suivantes\ :
.TP
\fBQSIZE\fP
Nombre d'octets de données dans tous les messages de la file (mais voir
BOGUES).
.TP
\fBNOTIFY_PID\fP
Si différent de zéro, alors le processus avec cet identifiant a utilisé
\fBmq_notify\fP(3) pour s'enregistrer pour les notifications asynchrones de
messages, et les champs suivants décrivent comment ces notifications se
produisent.
.TP
\fBNOTIFY\fP
Méthode de notification\ : 0 pour \fBSIGEV_SIGNAL\fP, 1 pour \fBSIGEV_NONE\fP et 2
pour \fBSIGEV_THREAD\fP.
.TP
\fBSIGNO\fP
Numéro de signal à utiliser pour \fBSIGEV_SIGNAL\fP.
.SS "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 \fBselect\fP(2),
\fBpoll\fP(2) ou \fBepoll\fP(7). Cela n'est pas portable.
.P
Le drapeau « close\-on\-exec » (voir \fBopen\fP(2)) est automatiquement
positionné sur le descripteur de fichier renvoyé par \fBmq_open\fP(2).
.SS "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 \fBipc_namespaces\fP(7).
.SH NOTES
Les files de messages System V (\fBmsgget\fP(2), \fBmsgsnd\fP(2),
\fBmsgrcv\fP(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.
.P
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.
.SH BOGUES
Depuis Linux 3.5 jusqu’à Linux 3.14, le noyau imposait un plafond de 1024
(\fBHARD_QUEUESMAX\fP) pour la valeur à laquelle la limite \fIqueues_max\fP
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.
.P
.\" commit d6629859b36d
.\" commit de54b9ac253787c366bbfb28d901a31954eb3511
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.
.SH EXEMPLES
Un exemple d'utilisation des différentes fonctions des files de messages est
disponible dans \fBmq_notify\fP(3).
.SH "VOIR AUSSI"
\fBgetrlimit\fP(2), \fBmq_getsetattr\fP(2), \fBpoll\fP(2), \fBselect\fP(2),
\fBmq_close\fP(3), \fBmq_getattr\fP(3), \fBmq_notify\fP(3), \fBmq_open\fP(3),
\fBmq_receive\fP(3), \fBmq_send\fP(3), \fBmq_unlink\fP(3), \fBepoll\fP(7),
\fBnamespaces\fP(7)
.PP
.SH TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess ,
Stéphan Rafin ,
Thierry Vignaud ,
François Micaux,
Alain Portal ,
Jean-Philippe Guérard ,
Jean-Luc Coulon (f5ibh) ,
Julien Cristau ,
Thomas Huriaux ,
Nicolas François ,
Florentin Duneau ,
Simon Paillard ,
Denis Barbier ,
David Prévot
et
Jean-Paul Guillonneau
.
.PP
Cette traduction est une documentation libre ; veuillez vous reporter à la
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License version 3
.UE
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
.PP
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
.MT debian-l10n-french@lists.debian.org
.ME .