Linux

CentOS 4.8

semget(2)


SEMGET

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 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.

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 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.

BOGUES

L’utilisation de IPC_PRIVATE n’empêche pas les autres 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.


semget(2)