mq_overview

Autres langues

Langue: fr

Version: 25 février 2006 (fedora - 16/08/07)

Section: 7 (Divers)

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 Système 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().

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écéssaire, 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.

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 :
Interface bibliothèque Appel système
mq_close(3) close(2)
mq_getattr(3) mq_getsetattr(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)

DÉTAILS SPÉCIFIQUES À LINUX

Versions

Les files de messages POSIX sont supportées sous Linux depuis le noyau 2.6.6. Le support glibc est fourni 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(), 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 fichier 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 fichier 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 Système 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 Système V ; d'un autre coté, les files de messages POSIX sont moins largement disponibles (particulièrement sur d'anciens systèmes) que celles de Système V.

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), mq_close(3), mq_getattr(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), poll(2), select(2), 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 9 août 2006.

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=en man 7 mq_overview ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.