NOM
msgget - Obtenir un identifiant de file de messages
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
L’appel système msgget() renvoie l’identifiant de la file de messages
associée à la clé key. 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. Ceci est similaire au comportement de open(2) avec la
combinaison O_CREAT | O_EXCL.
Lors de la création, les bits de poids faibles de l’argument msgflg
définissent les permissions d’accès à la file de message (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 (voir 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 faibles de msgflg sont copiés dans les 9
bits de poids faibles de msg_perm.mode.
msg_qnum, msg_lspid, msg_lrpid, msg_stime et msg_rtime sont
fixés à 0.
msg_ctime est rempli avec l’heure actuelle.
msg_qbytes est rempli avec la limite système MSGMNB.
Si la file de message 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 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.
EEXIST Une file de messages existe associée à la clé key et msgflg
réclame à la fois IPC_CREAT et IPC_EXCL.
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 maximum de files de messages sur le système (MSGMNI)
est atteint.
CONFORMITÉ
SVr4, POSIX.1-2001.
NOTES
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 faibles de msgflg et créera une
nouvelle file de messages.
La limite système concernant les files de messages et affectant
msgget() est
MSGMNI Nombre maximum de files de messages sur le système (sous Linux,
cette limite peut être consultée et modifiée grâce au fichier
/proc/sys/kernel/msgmni).
Notes sur 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), svipc(7)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».