Man page - mq_overview(7)

Packages contains this manual

Available languages:

en fr ja ru

Manual

mq_overview

NOM
DESCRIPTION
Interfaces de bibliothĂšque et appels systĂšme
Versions
Configuration du noyau
Persistance
Liaison
/proc interfaces
Limitation des ressources
Monter le systĂšme de fichiers des files de messages
Implémentation de Linux des descripteurs de files de messages
Espaces de noms IPC
NOTES
BOGUES
EXEMPLES
VOIR AUSSI
TRADUCTION

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 :

Image grohtml-3849317-1.png

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 .