SEMGET
Section: Manuel du programmeur Linux (2) Updated: 18 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
NOTES
BOGUES
CONFORMITÉ
VOIR AUSSI
TRADUCTION
NOM
semget - Obtenir l'identificateur d'un ensemble de sémaphores.
SYNOPSIS
DESCRIPTION
Cette fonction retourne l'identificateur de l'ensemble de
sémaphores associé à la valeur de clé
key.
Un nouvel ensemble 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 signification 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.
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 réussit, 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
précise à la fois
IPC_CREAT
et
IPC_EXCL.
- ENOENT
-
Aucun jeu de sémaphore associé a
key
n'existe
et l'argument
semflg
ne précise pas
IPC_CREAT.
- EINVAL
-
nsems
est inférieur à zéro ou supérieur à la limite sur le nombre de sémaphores
par ensemble,
(SEMMSL),
ou l'ensemble de sémaphores identifié par
key
existe déjà, et
nsems
est plus grand que le nombre de sémaphores par ensemble..
- 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 maximal 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'argument
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 : dépend de l'implémentation.
Les valeurs supérieures à
SEMMSL * SEMMNI
sont incorrectes.
BOGUES
L'utilisation de
IPC_PRIVATE
n'empêche pas les autres processus d'accéder au jeu de sémaphores alloué.
Le choix de ce mot est malheureux, il aurait mieux valu utiliser IPC_NEW.
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
EFBIG, E2BIG, EAGAIN, ERANGE, et EFAULT.
VOIR AUSSI
TRADUCTION
Christophe Blaess, 1996-2003.
|