msgget
Section: System Calls (2)
Updated: 5 février 2023
Index
Return to Main Contents
NOM
msgget - Obtenir un identifiant de file de messages System V
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
DESCRIPTION
L'appel système msgget() renvoie l'identifiant de la file de messages
System V associée à la valeur de la clé key. Il peut être utilisé soit
pour obtenir l'identifiant d'une file de messages précédemment créée (quand
msgflg vaut zéro et key n'a pas la valeur IPC_PRIVATE), soit pour
créer un nouvel ensemble.
Une nouvelle file de messages est créée si key a la valeur IPC_PRIVATE
ou bien si key n'est pas IPC_PRIVATE, aucune file de messages n'est
associée à key, et IPC_CREAT a été introduit dans 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. Cela 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 Ces bits de
permission ont le même format et la même sémantique que les permissions
indiquées pour l’argument mode dans les appels open(2). (Les
permissions d'exécution ne sont pas utilisées).
Lors de la création d’une nouvelle file de messages, sa structure de données
associée msqid_ds (consultez msgctl(2)) est initialisée 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 non
négatif), s'il réussit. En cas d'échec -1 est renvoyé et errno est
défini pour indiquer l'erreur.
ERREURS
- EACCES
-
Une file de messages existe associée à la clé key, mais le processus
appelant n'a pas de permissions pour accéder à cette file et n'a pas la
capacité CAP_IPC_OWNER dans l'espace de noms utilisateur qui gère son
espace de noms IPC.
- 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 la nouvelle structure de données.
- ENOSPC
-
Une file de messages doit être créée mais le nombre maximal de files de
messages sur le système (MSGMNI) est atteint.
STANDARDS
POSIX.1-2001, POSIX.1-2008, SVr4.
NOTES
IPC_PRIVATE n'est pas destiné au champ msgflg mais est du type
key_t. Si cette valeur spéciale est fournie pour key, l'appel système
ignorera tout sauf les 9 bits de poids faible de msgflg et créera une
nouvelle file de messages (en cas de succès).
La limite système concernant les ressources de files de messages et
affectant un appel à msgget() est :
- MSGMNI
-
Limite système du nombre de files de messages. Avant Linux 3.19, la valeur
par défaut de cette limite était calculée en utilisant une formule fondée
sur la mémoire disponible du système. Depuis Linux 3.19, la valeur par
défaut est de 32 000. Sous Linux, cette limite peut être consultée et
modifiée grâce au fichier /proc/sys/kernel/msgmni.
Notes pour Linux
Jusqu'à Linux 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)
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-Philippe MENGUAL <jpmengual@debian.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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- STANDARDS
-
- NOTES
-
- Notes pour Linux
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 13:56:43 GMT, May 22, 2024