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 messages associee a la cle key. Une nouvelle file de messages est cree si key a la valeur IPC_PRIVATE ou si aucune file de message n'est associee a key, et si la valeur IPC_CREAT a ete introduite dans msgflg (c'est a dire msgflg&IPC_CREAT non nul). La presence des champs IPC_CREAT et IPC_EXCL dans msgflg joue le meme role, par rapport a l'existence de la file de messages, que la presence des champs O_CREAT et O_EXCL dans l'argument mode de l'appel systeme open(2). La fonction msgget echouera si msgflg indique a la fois IPC_CREAT et IPC_EXCL et si une file de messages existe deja associee a key.

Lors de la creation, les 9 bits de poids faibles de l'argument msgflg definissent les permissions d'acces a la file de message (pour le proprietaire, le groupe, et les autres) avec le meme format et la meme signification que les permissions d'acces dans les appels open(2) ou creat(2) (bien que la permission d'execution ne soit pas utilisee).

Pendant la creation, l'appel systeme initialise la structure systeme 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 copies dans les 9 bits de poids faibles de msg_perm.mode

    msg_qnum, msg_lspid, msg_lrpid, msg_stime et msg_rtime sont fixes a 0.

    msg_ctime est rempli avec l'heure actuelle.

    msg_qbytes est rempli avec la limite systeme MSGMNB.

Si la file de message existe deja, les permissions d'acces sont controlees, et une verification est faite pour voir si la file est prete a etre detruite.

VALEUR RENVOYEE
msgget renvoie l'ientificateur de la file de messages (un entier positif), s'il reussit. En cas d'echec -1 est renvoye et errno contient le code d'erreur.

ERREURS

EACCES
    Une file de messages existe associee a la cle key, mais le processus appelant n'a pas de permissions sur cette file.

EEXIST
    Une file de messages existe associee a la cle key et msgflg reclame a la fois IPC_CREAT et IPC_EXCL.

EIDRM
    la file de messages est prete a etre supprimee.

ENOENT
    Aucune file de messages n'existe associee a la cle key et msgflg ne contient pas IPC_CREAT.

ENOMEM
    Pas assez de memoire pour les nouvelles structures de donnees.

ENOSPC
    Le nombre maximum de files de messages sur le systeme (MSGMNI) est atteint.

NOTES
IPC_PRIVATE n'est pas destine au champ msgflg mais est du type key_t. Si cette valeur speciale est fournie a la place de key, l'appel systeme ignorera tout sauf les 9 bits de poids faibles de msgflg et creera une nouvelle file de messages.

La limite systeme concernant les files de messages et affectant msgget est

MSGMNI
    Nombre maximum de files de messages sur le systeme.

BUGS
l'utilisation de IPC_PRIVATE n'empeche pas les autres processus d'avoir acces a la file de messages allouee.

Comme pour les fichiers, il n'y a actuellement pas de possibilite intrinseque d'assurer l'exclusivite d'acces a une file de messages pour un processus. Reclamer a la fois IPC_CREAT et IPC_EXCL dans msgflg garantit seulement qu'une nouvelle file sera cree, mais n'implique pas un acces exclusif a la file.

CONFORMITE
SVr4, SVID. SVr4 ne documente pas le code d'erreur EIDRM.

VOIR AUSSI
ftok(3), ipc(5), msgctl(2), msgsnd(2), msgrcv(2).