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);
DESCRIPTION¶
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 (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 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 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 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 maximal de files de messages sur le système
( MSGMNI) est atteint.
SVr4, POSIX.1-2001.
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
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 maximal 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.44 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
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> ».