mq_overview(7) Miscellaneous Information Manual mq_overview(7) NOM mq_overview - Apercu des files de messages POSIX DESCRIPTION Les files de messages POSIX permettent aux processus d'echanger des donnees 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 fonctionnalites similaires. Les files de messages sont creees et ouvertes en utilisant mq_open(3). Cette fonction renvoie un descripteur de file de messages (mqd_t), utilise pour se referer a la file de messages ouverte dans les prochains appels. Chaque file de messages est distinguee par son nom sous la forme /un_nom ; c'est-a-dire un chaine terminee par un caractere NULL pouvant avoir jusqu'a NAME_MAX caracteres (par exemple, 255), commencant par une barre oblique (<< / >>) suivie d'un caractere ou plus, aucun de ces derniers n'etant une barre oblique. Deux processus peuvent operer sur la meme file en fournissant le meme nom a mq_open(3). Les messages sont transferes a une file et recuperes 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 necessaire, elle peut etre supprimee avec mq_unlink(3). Les attributs de la file peuvent etre obtenus et (dans certains cas) modifies en utilisant mq_getattr(3) et mq_setattr(3). Un processus peut demander un avertissement asynchrone de l'arrivee d'un message sur une file auparavant vide en utilisant mq_notify(3). Un descripteur de file de messages est une reference a une description d'une file de messages ouverte (consulter open(2)). Apres un appel a fork(2), un processus enfant herite d'une copie des descripteurs de file de messages de son parent, et ces descripteurs referent aux memes 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 associes a la description de la file de messages ouverte. Chaque message contient une priorite associee, et les messages sont toujours delivres au processus de reception par ordre de plus haute priorite. L'intervalle de priorite des messages va de 0 (faible) a sysconf(_SC_MQ_PRIO_MAX) - 1 (haute). Sur Linux, sysconf(_SC_MQ_PRIO_MAX) renvoie 32768, mais POSIX.1-2001 n'exige des implementations que la prise en charge des priorites allant au moins de 0 a 31. Certaines implementations ne proposent que cet intervalle. Le reste de cette section decrit certains details specifiques a l'implementation Linux des files de messages POSIX. Interfaces de bibliotheque et appels systeme Dans la plupart des cas, les interfaces de bibliotheque mq_*() listees ci-dessus sont implementees au-dessus d'appels systeme sous-jacents du meme nom. Les exceptions a cette regle sont indiquees dans le tableau ci-dessous : Interface de bibliotheque Appel systeme 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 gerees par Linux que depuis le noyau 2.6.6. La gestion n'a ete ajoutee a 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 activee par defaut. Persistance Les files de messages POSIX persistent dans le noyau : si une file de messages n'est pas supprimee avec mq_unlink(3), elle existera jusqu'a l'extinction du systeme. Liaison Les programmes utilisant l'API des files de messages POSIX doivent etre compiles avec cc -lrt pour etre lies a la bibliotheque temps reel librt. /proc interfaces Les interfaces suivantes peuvent etre utilisees pour limiter la quantite de memoire du noyau utilisee par les files de messages POSIX et pour definir les attributs par defaut pour de nouvelles files de message : /proc/sys/fs/mqueue/msg_default (depuis Linux 3.5) Ce fichier definit la valeur utilisee par un nouveau reglage mq_maxmsg de file quand une file est creee avec un appel a mq_open(3) ou attr est indique comme NULL. La valeur par defaut 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 defaut de file sera la plus petite valeur entre msg_default et msg_max. Avant Linux 2.6.28, la valeur par defaut de mq_maxmsg etait 10. De Linux 2.6.28 jusqu'a Linux 3.4, c'etait la valeur definie de la limite msg_max. /proc/sys/fs/mqueue/msg_max Ce fichier peut etre utilise pour visualiser et changer la valeur limite pour le nombre maximal de messages dans une file. Cette valeur agit comme un plafond pour le parametre attr->mq_maxmsg indique a mq_open(3). La valeur par defaut 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 ignoree pour les processus privilegies (CAP_SYS_RESOURCE), mais la limite HARD_MSGMAX reste neanmoins imposee. La definition de HARD_MSGMAX a change au cours des versions du noyau : - jusqu'a Linux 2.6.32 : 131072 / sizeof(void *) - Linux 2.6.33 a 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 definit la valeur utilisee pour un nouveau reglage de mq_msgsize de file quand celle-ci est creee par un appel a mq_open(3) ou attr est indique comme NULL. La valeur par defaut pour ce fichier est 8192 (octets). Le minimum et le maximum sont comme dans /proc/sys/fs/mqueue/msgsize_max. Si msgsize_default excede msgsize_max, une nouvelle valeur par defaut de mq_msgsize pour la file est plafonnee a la limite msgsize_max. Avant Linux 2.6.28, la valeur par defaut de mq_msgsize etait 8192. De Linux 2.6.28 jusqu'a Linux 3.4, elle etait la valeur definie de la limite msgsize_max. /proc/sys/fs/mqueue/msgsize_max Ce fichier peut etre utilise pour visualiser et modifier la limite de la taille maximale des messages. Cette valeur agit comme un plafond pour le parametre attr->mq_msgsize indique a mq_open(3). La valeur par defaut de msgsize_max est de 8192 octets. La valeur minimale est 128 (8192 pour les noyaux anterieurs a 2.6.28). La valeur maximale pour msg_max a variee selon les versions du noyau. - avant Linux 2.6.28, la valeur maximale etait INT_MAX ; - de Linux 2.6.28 jusqu'a Linux 3.4, la limite etait 1 048 576 ; - depuis Linux 3.5, la limite est 16 777 216 (HARD_MSGSIZEMAX). La limite msgsize_max est ignoree pour les processus privilegies (CAP_SYS_RESOURCE), mais, depuis Linux 3.5, le plafond HARD_MSGSIZEMAX est impose aux processus privilegies. /proc/sys/fs/mqueue/queues_max Ce fichier peut etre utilise pour visualiser et modifier la limite pour le systeme entier du nombre de files de messages qui peuvent etre creees. La valeur par defaut de queues_max est 256. Aucun plafond n'est impose pour la limite queues_max. Les processus privilegies (CAP_SYS_RESOURCE) peuvent depasser cette limite (mais voir BOGUES). Limitation des ressources La limitation des ressources RLIMIT_MSGQUEUE, qui indique une limite sur la quantite d'espace qui peut etre utilise par toutes les files de messages appartenant a l'identifiant utilisateur reel du processus, est decrite dans getrlimit(2). Monter le systeme de fichiers des files de messages Sous Linux, les files de messages sont creees dans un systeme de fichiers virtuel. (D'autres implementations peuvent egalement fournir une telle fonctionnalite, mais les details sont probablement differents.) Ce systeme de fichiers peut etre monte (par le superutilisateur) en utilisant les commandes suivantes : # mkdir /dev/mqueue # mount -t mqueue none /dev/mqueue Le << sticky bit >> est automatiquement active sur le repertoire de montage. Une fois le systeme de fichiers monte, les files de messages sur le systeme peuvent etre visualisees et manipulees avec les commandes utilisees habituellement pour les fichiers (par exemple, ls(1) et rm(1)). Le contenu de chaque fichier dans le repertoire est compose 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 caracteristiques suivantes : QSIZE Nombre d'octets de donnees dans tous les messages de la file (mais voir BOGUES). NOTIFY_PID Si different de zero, alors le processus avec cet identifiant a utilise mq_notify(3) pour s'enregistrer pour les notifications asynchrones de messages, et les champs suivants decrivent comment ces notifications se produisent. NOTIFY Methode de notification : 0 pour SIGEV_SIGNAL, 1 pour SIGEV_NONE et 2 pour SIGEV_THREAD. SIGNO Numero de signal a utiliser pour SIGEV_SIGNAL. Implementation 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 implementation). Cela signifie qu'un descripteur de file de messages peut etre controle avec select(2), poll(2) ou epoll(7). Cela n'est pas portable. Le drapeau << close-on-exec >> (voir open(2)) est automatiquement positionne sur le descripteur de fichier renvoye 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'echange de messages entre les processus. Les files de messages POSIX fournissent une interface mieux concue. Cependant, les files de messages POSIX sont moins largement disponibles (en particulier sur les anciens systemes) que les files de messages System V. Actuellement (Linux 2.6.26), Linux ne gere pas l'utilisation des listes de controle d'acces (ACL : Access Control List) des files de messages POSIX. BOGUES Depuis Linux 3.5 jusqu'a Linux 3.14, le noyau imposait un plafond de 1024 (HARD_QUEUESMAX) pour la valeur a laquelle la limite queues_max pouvait etre elevee, et ce plafond etait impose meme pour les processus privilegies. Ce plafond a ete supprime dans Linux 3.14 et des correctifs pour Linux 3.5.x jusqu'a Linux 3.13.x ont aussi supprime ce plafond. Comme originellement implemente (et documente), 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 modifie ce comportement de facon que ce champ inclut un compte d'octets d'en-tetes du noyau utilises pour stocker les messages dans la file. Cette regression comportementale a ete rectifiee dans Linux 4.2 (et dans les series stables anterieures), de telle facon que le compte de nouveau n'inclut que les octets de donnees utilisateur des messages dans la file. EXEMPLES Un exemple d'utilisation des differentes 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Paul Guillonneau Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 mq_overview(7)