MQ_OVERVIEW
Section : Manuel du programmeur Linux (
7)
Mise à jour de la version anglaise : 15 juin 2008
Index
Menu principal
NOM
mq_overview - Vue d'ensemble des files de messages POSIX
DESCRIPTION
Les files de messages POSIX permettent à des processus d'échanger
des données sous la forme de message.
Cette API est distincte de celle fournie
par les files de messages System V
(
msgget(2),
msgsnd(2),
msgrcv(2),
etc.), mais fournit des fonctionnalités similaires.
Les files de messages sont créées et ouvertes avec
mq_open(3) ;
cette fonction renvoie un
descripteur de file de messages
(mqd_t),
qui sera utilisé pour faire référence à une file de messages ouverte
dans des appels ultérieurs.
Chaque file de messages est identifiée par un nom de la forme
/unnom.
Deux processus peuvent agir sur la même file en passant le même nom à
mq_open(3).
Les messages sont transférés de et vers une file avec respectivement
mq_receive(3)
et
mq_send(3).
Lorsqu'un processus a fini d'utiliser une file, il la ferme avec
mq_close(3),
et lorsque la file n'est plus nécessaire, elle peut être supprimée avec
mq_unlink(3).
Les attributs peuvent être obtenus et (dans certains cas) modifiés avec
mq_getattr(3)
et
mq_setattr(3).
Un processus peut demander une notification asynchrone de l'arrivée
d'un message sur une file précédemment vide avec
mq_notify(3).
Un descripteur de file de messages est une référence à une
description de file de messages ouverte
(cf.
open(2)).
Après un
fork(2),
un fils hérite d'une copie des descripteurs de file de messages du père,
et ces descripteurs font référence aux mêmes descriptions
de file de messages ouvertes que les descripteurs du père.
Les descripteurs correspondants dans les deux processus partagent
les attributs
(mq_flags)
qui sont associés à la description de file de messages ouverte.
Chaque message a une priorité
priority,
associée et les messages sont toujours délivrés au processus récepteur
avec la plus forte priorité.
Les priorités des messages s'échelonnent de 0 (plus basse) à
sysconf(_SC_MQ_PRIO_MAX) - 1
(plus haute).
Sous Linux,
sysconf(_SC_MQ_PRIO_MAX)
renvoie 32768 mais POSIX.1-2001 ne réclame qu'un intevalle de priorité
entre 0 et 31 ;
certaines implémentations ne fournissent 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 bibliothèque et appels système
Dans la plupart des cas, les interfaces bibliothèques
mq_*()
citées ci-dessus sont implémentées avec les appels système de même nom.
Les écarts à ce schéma sont indiqués dans la table suivante :
Versions
Les files de messages POSIX sont prises en charge par Linux
depuis le noyau 2.6.6.
La prise en charge glibc est fournie depuis la version 2.3.4.
Configuration du noyau
Le support des files de messages POSIX est configurable via l'option
de configuration du noyau
CONFIG_POSIX_MQUEUE
Cette option est active par défaut.
Persistence
Les files de messages POSIX ont la persistence du noyau :
si elle n'est pas supprimée avec
mq_unlink(3),
une file de messages existera jusqu'à l'arrêt du système.
Édition de liens
Les programmes utilisant l'API des files de messages
doivent être compilés avec
cc -lrt
pour être liés avec la bibliothèque temps réel
librt.
Interfaces /proc
Les interfaces suivantes peuvent être utilisées pour limiter la mémoire
noyau consommée par les files de messages POSIX :
- /proc/sys/fs/mqueue/msg_max
-
Ce fichier est utilisé pour voir et modifier la valeur plafond du nombre
maximal de messages dans une file.
Cette valeur agit comme plafond pour
l'argument
attr->mq_maxmsg
fourni à
mq_open(3).
La valeur par défaut et valeur minimum de
msg_max
est 10 ; la limite haute est
HARD_MAX :
(131072 / sizeof(void *))
(32768 sous Linux/86).
Cette limite est ignorée par les processus privilègiés
(CAP_SYS_RESOURCE),
mais le plafond
HARD_MAX
malgré tout imposé.
- /proc/sys/fs/mqueue/msgsize_max
-
Ce fichier est utilisé pour voir et modifier la valeur plafond de la taille
maximale des messages.
Cette valeur agit comme plafond pour l'argument
attr->mq_msgsize
fourni à
mq_open(3).
La valeur par défaut et valeur minimum de
msgsize_max
est 8192 octets ; la limite haute est INT_MAX :
(2147483647 sous Linux/86).
Cette limite est ignorée par les processus privilègiés.
(CAP_SYS_RESOURCE).
- /proc/sys/fs/mqueue/queues_max
-
Ce fichier est utilisé pour voir et modifier la limite à l'échelle
du système du nombre de files de messages qui peuvent être créées.
Seuls les processus privilègiés
(CAP_SYS_RESOURCE)
peuvent créer de nouvelles files de messages une fois que cette limite
a été atteinte.
La valeur par défaut de
queues_max
est 256 ;
elle peut être modifiée en toute valeur comprise en 0 et INT_MAX.
Limites resources
La limite ressource
RLIMIT_MSGQUEUE,
qui place une limite sur la quantité d'espace qui peut être consommée
par toutes les files de messages appartenant à un UID réel de 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 sur un système de fichiers
virtuel. (D'autres iplémentations peuvent également fournir une telle
fonctionnalité mais les détails peuvent différer.)
Le système de fichiers peut être monté avec les commandes suivantes :
$ mkdir /dev/mqueue
$ mount -t mqueue none /dev/mqueue
Le sticky bit est automatiquement activé sur le répertoire monté.
Après que le système de fichiers ait été monté, les files de messages sur
le système de fichiers peuvent être vues et manipulées avec des commandes
génralement utilisées pour les fichiers
(par exemple,
ls(1),
rm(1),
etc.).
Le contenu de chaque fichier du répertoire consiste en une ligne unique
d'information sur la file :
$ ls /dev/mqueue/mymq
QSIZE:129 NOTIFY:2 SIGNO:0 NOTIFY_PID:8260
$ mount -t mqueue none /dev/mqueue
Ces champs sont les suivants :
- QSIZE
-
Nombre d'octets de données dans tous les messages de la file.
- NOTIFY_PID
-
Si ce champ n'est pas nul, c'est que le processus avec ce PID a utilisé
mq_notify(3)
pour enregistrer une notification de message asynchrone,
et les champs restant décrivent comment les notifications surviennent.
- NOTIFY
-
Méthode de notification :
0 est
SIGEV_SIGNAL ,
1 est
SIGEV_NONE
et
2 est
SIGEV_THREAD.
- SIGNO
-
Numéro de signal pour utiliser avec
SIGEV_SIGNAL.
Scrutation des descripteurs de file de messages
Sous Linux, un descripteur de file de messages est actuellement
un descripteur de fichier et peut être surveillé avec
select(2),
poll(2)
ou
epoll(7).
Ceci n'est pas portable.
CONFORMITÉ
POSIX.1-2001.
NOTES
Les files de messages System V
(
msgget(2),
msgsnd(2),
msgrcv(2),
etc.) sont une ancienne API pour l'échange de messages entre processus.
Les files de messages POSIX fournissent une interface bien mieux conçue
que celles de System V ; d'un autre coté, les files de messages POSIX
sont moins largement disponibles (particulièrement sur d'anciens systèmes)
que celles de System V.
Actuellement (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.
EXEMPLE
Un exemple de l'utilisation des différentes fonctions de manipulation
de files de messages se trouve dans la page
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)
TRADUCTION
Ce document est une traduction réalisée par Alain Portal
<aportal AT univ-montp2 DOT fr> le 23 juillet 2006
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 7 mq_overview ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- DESCRIPTION
-
- Interfaces bibliothèque et appels système
-
- Versions
-
- Configuration du noyau
-
- Persistence
-
- Édition de liens
-
- Interfaces /proc
-
- Limites resources
-
- Monter le système de fichiers des files de messages
-
- Scrutation des descripteurs de file de messages
-
- CONFORMITÉ
-
- NOTES
-
- EXEMPLE
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008