Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       semget - Obtenir l'identifiant d'un ensemble de sémaphores System V

SYNOPSIS

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/sem.h>

       int semget(key_t key, int nsems, int semflg);

DESCRIPTION

       L'appel  système  semget() renvoie l'identifiant de l'ensemble de sémaphores System V 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  (consultez  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

       L'inclusion  de  <sys/types.h>  et <sys/ipc.h> n'est pas nécessaire sous Linux et n'est exigée par aucune
       version de POSIX. Cependant, certaines implémentations anciennes nécessitent l'inclusion de ces  fichiers
       d'en-tête,  et  le  SVID documente aussi leur inclusion. Les applications ayant pour but d'être portables
       pourraient inclure ces fichiers d'en-tête.

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

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

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