Loading

NOM

       semget - Obtenir l’identifiant 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);

       L’appel   système  semget()  renvoie  l’identifiant  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 contient à la fois IPC_CREAT et IPC_EXCL et qu’un ensemble de
       sémaphores existe déjà pour la clé key, semget() échoue et  errno  vaut
       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 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). Les permissions
       d’exécution 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 qui vient d’être créé  sont
       indéterminées (POSIX.1-2001 est explicite sur ce point). Même si Linux,
       comme de nombreuses autres implémentations, initialise les valeurs  des
       sémaphores  à 0, une application portable ne peut pas compter sur cette
       initialisation : elle doit initialiser explicitement les  sémaphores  à
       la valeur souhaitée.

       Durant  la  création, la structure de données semid_ds (voir semctl(2))
       contrôlant le jeu de sémaphores est initialisée ainsi par semget() :

              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 contiennent  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  d’accès  sont
       contrôlées.

VALEUR RENVOYÉE

       Si  l’appel  réussit, il renvoie l’identifiant de l’ensemble (un entier
       positif), sinon il renvoie -1 et errno contient le code d’erreur.

ERREURS

       En cas d’erreur, errno prend l’une des valeurs suivantes :

       EACCES Le jeu de sémaphore associé à key existe, mais le processus  n’a
              aucun   droit   d’accès   sur   lui   et  n’a  pas  la  capacité
              CAP_IPC_OWNER.

       EEXIST Le jeu de sémaphore associé a key existe mais l’argument  semflg
              précise à la fois IPC_CREAT et IPC_EXCL.

       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.

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

CONFORMITÉ

       SVr4, POSIX.1-2001.

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 de jeux de sémaphores sur le système : dépend  de
              la politique (sous Linux, cette limite peut être lue et modifiée
              dans le quatrième champ de /proc/sys/kernel/sem).

       SEMMSL Nombre  maximal  de  sémaphores  par  ensemble :  dépendant   de
              l’implémentation  (sous  Linux,  cette  limite  peut être lue et
              modifiée dans le premier champ de /proc/sys/kernel/sem).

       SEMMNS Nombre maximal de sémaphores  sur  le  système :  dépend  de  la
              politique  (sous  Linux,  cette limite peut être lue et modifiée
              dans le  second  champ  de  /proc/sys/kernel/sem).  Les  valeurs
              supérieures à SEMMSL * SEMMNI sont incorrectes.

BOGUES

       Le choix du nom IPC_PRIVATE est malheureux, IPC_NEW aurait mieux décrit
       sa fonction.

       Les sémaphores dans un ensemble ne sont pas initialisés  par  semget().
       Pour  initialiser  les  sémaphores,  il  faut  utiliser  semctl(2) pour
       effectuer une opération SETVAL ou SETALL sur l’ensemble de  sémaphores.
       (Lorsque  plusieurs  pairs ne savent pas lequel initialisera l’ensemble
       en premier, un test pour une valeur non  nulle  de  sem_otime  dans  la
       structure  de  données  associée  renvoyée  par l’opération IPC_STAT de
       semctl(2)  peut  être  utilisée  pour  éviter  les  problèmes   d’accès
       concurrents.)

VOIR AUSSI

       semctl(2),   semop(2),   ftok(3),   capabilities(7),   sem_overview(7),
       svipc(7)

COLOPHON

       Cette page fait partie de  la  publication  3.23  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

       Veuillez  signaler  toute  erreur   de   traduction   en   écrivant   à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».