SEMGET(2)

NOM
semget - Obtenir l'identificateur d'un ensemble de semaphores.

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 semaphores associe a la valeur cle key. Un nouvel ensemble contenant nsems semaphores est cree si key a la valeur IPC_PRIVATE ou si aucun ensemble n'est associe a key, et si l'option IPC_CREAT est presente dans semflg. La presence de IPC_CREAT et IPC_EXCL dans le champ semflg joue le meme role, par rapport a l'existence du jeu de semaphores, que la presence de O_CREAT et O_EXCL dans l'argument de mode de l'appel systeme open(2) i.e. la fonction semget echouera si semflg demande a la fois IPC_CREAT et IPC_EXCL et si un semaphore associe a key existe deja.

Pendant la creation, les 9 bits de poids faibles de l'argument semflg definissent les permissions d'access (pour le proprietaire, le groupe et les autres) au jeu de semaphores, en utilisant le meme format et la meme signification que les droits d'access dans open(2) ou creat(2). Les permissions d'executions ne sont pas utilisees par le systeme, et pour un jeu de semaphores, l'autorisation d'ecriture signifie autorisation de modification.

Durant la creation, la structure de donnees semid_ds controlant le jeu de semaphores est initialisee ainsi :

    sem_perm.cuid et sem_perm.uid contiennent l'UID effectif du processus apppelant.

    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 recoit 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 systeme n'est pas une creation d'ensemble de semaphores. Autrement nsems doit etre superieur a 0 et inferieur ou egal au nombre maximal de semaphores par ensemble, (SEMMSL).

Si le jeu de semaphores existe deja, les permissions d'acces sont controlees, et l'on verifie si l'ensemble est sur le point d'etre detruit.

VALEUR RENVOYEE
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

EACCES
    Le jeu de semaphore associe a key existe, mais le processus n'a aucun droit d'acces sur lui

EEXIST
    Le jeu de semaphore associe a key existe mais l'argument semflg precise a la fois IPC_CREAT et IPC_EXCL.

EIDRM
    le jeu de semaphores est pret a etre detruit

ENOENT
    Aucun jeu de semaphore associe a key n'existe et l'argument semflg ne precise pas IPC_CREAT.

ENOMEM
    Pas assez de memoire pour creer les structures necessaires.

ENOSPC
    Le nombre maximal de jeux de semaphores sur le systeme (SEMMNI) est atteint, ou le nombre maximal de semaphores sur le systeme est atteint (SEMMNS).

NOTES
IPC_PRIVATE n'est pas une option, mais un objet de type key_t. Si l'on utilise cette valeur speciale dans l'argument key, l'appel systeme ne se preoccupera que des 9 bits de poids faibles de semflg et tentera de creer un nouveau jeu de semaphores.

Les limites suivantes concernent l'appel systeme semget :

SEMMNI
    Nombre maximal d'ensembles de semaphores sur le systeme.

SEMMSL
    Nombre maximal de semaphores par ensemble.

SEMMNS
    Nombre maximal de semaphores sur le systeme.

BUGS
L'utilisation de IPC_PRIVATE n'empeche pas les autres processus d'acceder au jeu de semaphores alloue.

Comme pour les fichiers, il n'existe actuellement aucun moyen intrinseque pour un processus de se garantir un acces exclusif a un ensemble de semaphores. Reclamer a la fois IPC_CREAT et IPC_EXCL dans l'argument semflg garantit seulement la creation d'un nouvel ensemble, et non pas un acces exclusif.

Les structures de donnees associees a chaque semaphore dans l'ensemble ne sont pas initialisees lors de l'appel systeme. Pour effectuer cette initialisation, il faut executer un appel a semctl(2) avec les commandes SETVAL ou SETALL.

CONFORMITE
SVr4, SVID. SVr4 documente des conditions d'erreur supplementairs EINVAL, EFBIG, E2BIG, EAGAIN, ERANGE, et EFAULT.

VOIR AUSSI
ftok(3), ipc(5), semctl(2), semop(2).