table of contents
MQ_OVERVIEW(7) | Manuel du programmeur Linux | MQ_OVERVIEW(7) |
NOM¶
mq_overview - Panorama des files de messages POSIXDESCRIPTION¶
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.Interfaces de bibliothèque et appels système¶
Dans la plupart des cas, les interfaces de bibliothèque mq_*() sont implémentées autour d'appels système du même nom. Les exceptions à cette règle sont indiquées dans le tableau ci‐dessous :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 à glibc que depuis la version 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.Édition des liens¶
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.Interfaces /proc¶
Les interfaces suivantes peuvent être utilisées pour limiter la quantité de mémoire du noyau utilisée par les files de messages POSIX :- /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 une borne 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 pour les noyaux antérieurs à 2.6.28). La valeur maximale vaut HARD_MAX : (131072 / sizeof(void *)) (32768 sur Linux/86). Cette limite est ignorée pour les processus privilégiés ( CAP_SYS_RESOURCE), mais la limite HARD_MAX reste néanmoins imposée.
- /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 une borne 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 de 128 (8192 pour les noyaux antérieurs à 2.6.28). La valeur maximale de msgsize_max est de 1 048 576 octets (dans les noyaux antérieurs à 2.6.28, la valeur maximale était de INT_MAX, c'est-à-dire 2 147 483 647 sur Linux/86). Cette limite est ignorée pour les processus privilégiés ( CAP_SYS_RESOURCE).
- /proc/sys/fs/mqueue/queues_max
- Ce fichier peut être utilisé pour visualiser et modifier la limite au niveau 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 la limite a été atteinte. La valeur par défaut de queues_max vaut 256, elle peut être remplacée par n'importe quelle valeur entre 0 et INT_MAX.
Limitation des ressources¶
La limitation des ressources RLIMIT_MSGQUEUE, qui indique une limite sur la quantité d'espace qui peut être utilisée 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émentation 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.
$ 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.
- NOTIFY_PID
- Si différent de zéro, alors le processus avec cet identifiant a utilisé mq_notify(3) pour s'enregistrer pour les avertissements asynchrones de messages, et les champs suivants décrivent comment ces avertissements se produisent.
- NOTIFY
- Méthode d'avertissement : 0 pour SIGEV_SIGNAL, 1 pour SIGEV_NONE et 2 pour SIGEV_THREAD.
- SIGNO
- Numéro de signal à utiliser pour SIGEV_SIGNAL.
Consultation des descripteurs de files de messages¶
Sous Linux, un descripteur de file de messages est en fait un descripteur de fichier, et peut être contrôlé 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 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 disponibles (en particulier sur les anciens systèmes) que les files de messages System V.EXEMPLE¶
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)COLOPHON¶
Cette page fait partie de la publication 3.44 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <http://www.kernel.org/doc/man-pages/>.TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>. Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009). Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le paquet manpages-fr. Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».27 septembre 2009 | Linux |