Provided by: manpages-fr_4.27.0-1_all 

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 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.9.1 2 mai 2024 mq_overview(7)