MSGGET(2)

NOM
msgget - Obtenir un identifiant de file de messages System V

SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

int msgget(key_t key, int msgflg);

DESCRIPTION
The msgget() system call returns the System V message queue identifier associated with the value of the key argument. It may be used either to obtain the identifier of a previously created message queue (when msgflg is zero and key does not have the value IPC_PRIVATE), or to create a new set.

A new message queue is created if key has the value IPC_PRIVATE or key isn't IPC_PRIVATE, no message queue with the given key key exists, and IPC_CREAT is specified in msgflg.

Si msgflg indique à la fois IPC_CREAT et IPC_EXCL et une file de messages est déjà associée à key, msgget() échoue en positionnant errno à EEXIST. Ceci est similaire au comportement de open(2) avec la combinaison O_CREAT | O_EXCL.

Lors de la création, les bits de poids faible de l'argument msgflg définissent les permissions d'accès à la file de messages (pour le propriétaire, le groupe, et les autres) avec le même format et la même signification que les permissions d'accès (mode) dans les appels open(2). (Les permissions d'exécution ne sont pas utilisées).

Pendant la création, l'appel système initialise la structure système msqid_ds (consultez msgctl(2)) de la file de messages comme suit :

•   msg_perm.cuid et msg_perm.uid sont remplis avec l'UID effectif du processus appelant.

•   msg_perm.cgid et msg_perm.gid sont remplis avec le GID effectif du processus appelant.

•   Les 9 bits de poids faible de msgflg sont copiés dans les 9 bits de poids faible de msg_perm.mode.

•   msg_qnum, msg_lspid, msg_lrpid, msg_stime et msg_rtime sont configurés à 0.

•   msg_ctime est rempli avec l'heure actuelle.

•   msg_qbytes est rempli avec la limite système MSGMNB.

Si la file de messages existe déjà, les permissions d'accès sont contrôlées, et une vérification est faite pour voir si la file est prête à être détruite.

VALEUR RENVOYÉE
msgget() renvoie l'identifiant de la file de messages (un entier positif), s'il réussit. En cas d'échec -1 est renvoyé et errno contient le code d'erreur.

ERREURS
En cas d'échec, errno prend l'une des valeurs suivantes :

EACCES
    A message queue exists for key, but the calling process does not have permission to access the queue, and does not have the CAP_IPC_OWNER capability in the user namespace that governs its IPC namespace.

EEXIST
    IPC_CREAT et IPC_EXCL sont spécifiés dans msgflg, mais une file de messages associée à la clé key existe déjà.

ENOENT
    Aucune file de messages n'existe associée à la clé key et msgflg ne contient pas IPC_CREAT.

ENOMEM
    Le système doit créer une file de messages, mais n'a pas assez de mémoire pour les nouvelles structures de données.

ENOSPC
    Le nombre maximal de files de messages sur le système (MSGMNI) est atteint.

CONFORMITÉ
POSIX.1-2001, POSIX.1-2008, SVr4.

NOTES
L'inclusion de <sys/types.h> et <sys/ipc.h> n'est pas nécessaire sous Linux et n'est exigée par aucune version de POSIX. Cependant, certaines implémentations anciennes nécessitent l'inclusion de ces fichiers d'en-tête, et le SVID documente aussi leur inclusion. Les applications ayant pour but d'être portables pourraient inclure ces fichiers d'en-tête.

IPC_PRIVATE n'est pas destiné au champ msgflg mais est du type key_t. Si cette valeur spéciale est fournie à la place de key, l'appel système ignorera tout sauf les 9 bits de poids faible de msgflg et créera une nouvelle file de messages.

La limite système concernant les files de messages et affectant msgget() est

MSGMNI
    System-wide limit on the number of message queues. Before Linux 3.19, the default value for this limit was calculated using a formula based on available system memory. Since Linux 3.19, the default value is 32,000. On Linux, this limit can be read and modified via /proc/sys/kernel/msgmni.

  Notes pour Linux
Jusqu'à la version 2.3.20, Linux renvoyait EIDRM pour un msgget() sur une file de messages prête à être supprimée.

BOGUES
Le choix du nom IPC_PRIVATE est malheureux, IPC_NEW aurait mieux décrit sa fonction.

VOIR AUSSI
msgctl(2), msgrcv(2), msgsnd(2), ftok(3), capabilities(7), mq_overview(7), sysvipc(7)

COLOPHON
Cette page fait partie de la publication 5.08 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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> et David Prévot <david@tilapin.org> 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>.