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