msgget - Obtenir un identifiant de file de messages System V
Bibliothèque C standard (
libc,
-lc)
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
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.
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.
- 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.
POSIX.1-2001, POSIX.1-2008, SVr4.
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.
Jusqu'à Linux 2.3.20, Linux renvoyait
EIDRM pour un
msgget() sur une file de messages prête à être
supprimée.
Le choix du nom
IPC_PRIVATE est malheureux,
IPC_NEW aurait mieux
décrit sa fonction.
msgctl(2),
msgrcv(2),
msgsnd(2),
ftok(3),
capabilities(7),
mq_overview(7),
sysvipc(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Philippe MENGUAL <
[email protected]>
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 à
[email protected]