L'appel système
msgget()
renvoie l'identificateur 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 si
aucune file de message n'est associée à
key,
et si la valeur
IPC_CREAT
a été introduite dans
msgflg.
Si
msgflg
indique à la fois
IPC_CREAT
et
IPC_EXCL
et si une file de messages associée à
key
existe déjà, la fonction
msgget()
échouera et
errno
contiendra la valeur
EEXIST.
(C'est analogue à l'effet de la combination
O_CREAT | O_EXCL
pour
open(2).)
Lors de la création, les bits de poids faibles de l'argument
msgflg
définissent les permissions de la file de message.
Ces bits de permission ont le même format et la même signification
que les permissions indiquées dans l'argument
mode
de l'appel
open(2).
(Les permission d'exécution ne sont pas utilisées).
Pendant la création, la structure de données associée
msqid_ds
est initialisée de la manière suivante :
-
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 sont
contrôlées, et une vérification est faite pour voir si la file
est prête à être détruite.