SEMGET(2) Manuel du programmeur Linux SEMGET(2)
NOM
semget - Obtenir l'identificateur d'un ensemble de
sémaphores.
SYNOPSIS
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/sem.h>
int semget ( key_t key, int nsems, int semflg )
DESCRIPTION
Cette fonction retourne l'identificateur de l'ensemble de
sémaphores associé à la valeur cle key. Un nouvel ensem
ble contenant nsems sémaphores est créé si key a la valeur
IPC_PRIVATE ou si aucun ensemble n'est associé à key, et
si l'option IPC_CREAT est présente dans semflg. (i.e.
semflg & IPC_CREAT différent de zéro).
La présence de IPC_CREAT et IPC_EXCL dans le champ semflg
joue le même rôle, par rapport à l'existence du jeu de
sémaphores, que la présence de O_CREAT et O_EXCL dans
l'argument de mode de l'appel système open(2) i.e. la
fonction semget échouera si semflg demande à la fois
IPC_CREAT et IPC_EXCL et si un sémaphore associé a key
existe déjà.
Pendant la création, les 9 bits de poids faibles de
l'argument semflg définissent les permissions d'accès
(pour le propriétaire, le groupe et les autres) au jeu de
sémaphores, en utilisant le même format et la même signi
fication que les droits d'accès dans open(2) ou creat(2).
Les permissions d'exécutions ne sont pas utilisées par le
système, et pour un jeu de sémaphores, l'autorisation
d'écriture signifie autorisation de modification.
Durant la création, la structure de données semid_ds
contrôlant le jeu de sémaphores est initialisée ainsi :
sem_perm.cuid et sem_perm.uid contiennent l'UID
effectif du processus appelant.
sem_perm.cgid et sem_perm.gid contiennent le GID
effectif du processus appelant.
le 9 bits de poids faibles de sem_perm.mode sont
remplis avec les 9 bits de poids faibles de semflg.
sem_nsems reçoit la valeur nsems.
sem_otime est mis a 0.
sem_ctime est rempli avec l'heure actuelle.
Linux 18 Mai 1999 1
SEMGET(2) Manuel du programmeur Linux SEMGET(2)
l'argument nsems peut valoir 0 (ignore) si l'appel système
n'est pas une création d'ensemble de sémaphores.
Autrement nsems doit être supérieur à 0 et inférieur ou
égal au nombre maximal de sémaphores par ensemble,
(SEMMSL).
Si le jeu de sémaphores existe déjà, les permissions
d'accès sont contrôlées, et l'on vérifie si l'ensemble est
sur le point d'être détruit.
VALEUR RENVOYÉE
Si l'appel reussit, il renvoie l'identificateur de
l'ensemble (un entier positif), sinon il renvoie -1 et
errno contient le code d'erreur.
ERREURS
Eaccès Le jeu de sémaphore associé à key existe, mais
le processus n'a aucun droit d'accès sur lui
EEXIST Le jeu de sémaphore associé a key existe mais
l'argument semflg precise à la fois IPC_CREAT
et IPC_EXCL.
EIDRM le jeu de sémaphores est prêt à être détruit
ENOENT Aucun jeu de sémaphore associé a key n'existe
et l'argument semflg ne précise pas IPC_CREAT.
ENOMEM Pas assez de mémoire pour créer les structures
nécessaires.
ENOSPC Le nombre maximal de jeux de sémaphores sur le
système (SEMMNI) est atteint, ou le nombre max
imal de sémaphores sur le système est atteint
(SEMMNS).
NOTES
IPC_PRIVATE n'est pas une option, mais un objet de type
key_t. Si l'on utilise cette valeur spéciale dans l'argu
ment key, l'appel système ne se préoccupera que des 9 bits
de poids faibles de semflg et tentera de créer un nouveau
jeu de sémaphores.
Les limites suivantes concernent l'appel système semget :
SEMMNI Nombre maximal d'ensembles de sémaphores sur le
système.
SEMMSL Nombre maximal de sémaphores par ensemble.
SEMMNS Nombre maximal de sémaphores sur le système.
BUGS
L'utilisation de IPC_PRIVATE n'empêche pas les autres
Linux 18 Mai 1999 2
SEMGET(2) Manuel du programmeur Linux SEMGET(2)
processus d'accéder au jeu de sémaphores alloué.
Comme pour les fichiers, il n'existe actuellement aucun
moyen intrinsèque pour un processus de se garantir un
accès exclusif à un ensemble de sémaphores. Réclamer a la
fois IPC_CREAT et IPC_EXCL dans l'argument semflg garantit
seulement la création d'un nouvel ensemble, et non pas un
accès exclusif.
Les structures de données associées a chaque sémaphore
dans l'ensemble ne sont pas initialisées lors de l'appel
système. Pour effectuer cette initialisation, il faut
exécuter un appel à semctl(2) avec les commandes SETVAL ou
SETALL.
CONFORMITÉ
SVr4, SVID. SVr4 documente des conditions d'erreur
supplémentaires EINVAL, EFBIG, E2BIG, EAGAIN, ERANGE, et
EFAULT.
VOIR AUSSI
ftok(3), ipc(5), semctl(2), semop(2).
TRADUCTION
Christophe Blaess, 1997.
Linux 18 Mai 1999 3