L'appel système
semget()
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.
Si
semflg
indique à la fois
IPC_CREAT
et
IPC_EXCL
et si un sémaphore associé a
key
existe déjà,
alors
semget()
échouera en remplissant
errno
avec
EEXIST.
(Ceci est analogue à l'effet de la combinaison
O_CREAT | O_EXCL
pour
open(2).)
Pendant la création, les 9 bits de poids faibles de
l'argument
semflg
définissent les permissions (pour le propriétaire,
le groupe et les autres) du jeu de sémaphores, en utilisant
le même format et la même signification que l'argument
mode
dans
open(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.
Les valeurs des sémaphores dans un ensemble nouvellement créé sont
indéterminées.
(POSIX.1-2001 est explicite sur ce point)
Bien que Linux, comme beaucoup d'autres implémentations, initialise
les valeurs des sémaphores à 0, un application portable
ne devrait pas compter dessus : elle devrait explicitement initialiser
les sémaphores aux valeurs souhaitées.
Durant la création d'un nouveau jeu de sémaphores,
semget()
initialise la structure de données
semid_ds
associée (voir
semctl(2))
de la manière suivante :
-
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.
-
Les 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 à 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 sont contrôlées,
et l'on vérifie si l'ensemble est sur le point d'être détruit.