MSGGET(2) Manuel du programmeur Linux MSGGET(2)
NOM
msgget - Obtenir un identificateur 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
Cette fonction renvoie l'identificateur de la file de mes
sages associée à la cle key. Une nouvelle file de mes
sages est créée si key a la valeur IPC_PRIVATE ou si
aucune file de message n'est associée à key, et si la
valeur IPC_CREAT a été introduite dans msgflg (c'est à
dire msgflg&IPC_CREAT non nul). La présence des champs
IPC_CREAT et IPC_EXCL dans msgflg joue le même role, par
rapport à l'existence de la file de messages, que la
présence des champs O_CREAT et O_EXCL dans l'argument mode
de l'appel système open(2).
La fonction msgget échouera si msgflg indique à la fois
IPC_CREAT et IPC_EXCL et si une file de messages existe
déjà associée à key.
Lors de la création, les 9 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 dans les appels open(2) ou
creat(2) (bien que la permission d'exécution ne soit pas
utilisée).
Pendant la création, l'appel système initialise la struc
ture système msqid_ds 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.
Linux 8 Avril 1997 1
MSGGET(2) Manuel du programmeur Linux MSGGET(2)
Si la file de message existe déjà, les permissions d'accès
sont controlées, et une vérification est faite pour voir
si la file est prête à être détruite.
VALEUR RENVOYÉE
msgget renvoie l'ientificateur de la file de messages (un
entier positif), s'il réussit. En cas d'échec -1 est ren
voyé et errno contient le code d'erreur.
ERREURS
EACCES Une file de messages existe associée à la clé
key, mais le processus appelant n'a pas de per
missions sur cette file.
EEXIST Une file de messages existe associée à la clé
key et msgflg réclame à la fois IPC_CREAT et
IPC_EXCL.
EIDRM la file de messages est prête à être supprimée.
ENOENT Aucune file de messages n'existe associée à la
clé key et msgflg ne contient pas IPC_CREAT.
ENOMEM Pas assez de mémoire pour les nouvelles struc
tures de données.
ENOSPC Le nombre maximum de files de messages sur le
système (MSGMNI) est atteint.
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.
BUGS
l'utilisation de IPC_PRIVATE n'empêche pas les autres pro
cessus d'avoir accès à la file de messages allouée.
Comme pour les fichiers, il n'y a actuellement pas de pos
sibilité intrinsèque d'assurer l'exclusivité d'accès à une
file de messages pour un processus.
Réclamer à la fois IPC_CREAT et IPC_EXCL dans msgflg
garantit seulement qu'une nouvelle file sera créée, mais
n'implique pas un accès exclusif à la file.
Linux 8 Avril 1997 2
MSGGET(2) Manuel du programmeur Linux MSGGET(2)
CONFORMITÉ
SVr4, SVID. SVr4 ne documente pas le code d'erreur EIDRM.
VOIR AUSSI
ftok(3), ipc(5), msgctl(2), msgsnd(2), msgrcv(2).
TRADUCTION
Christophe Blaess, 1997.
Linux 8 Avril 1997 3