Provided by: manpages-fr-dev_3.17.1-1_all bug

NOM

       semctl - Opérations de contrôle sur les sémaphores.

SYNOPSIS

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

       int semctl(int semid, int semnum, int cmd, ...);

DESCRIPTION

       Cette  fonction  effectue  l’opération de contrôle indiquée par cmd sur
       l’ensemble  de  sémaphores  (ou  sur  le   semnum-ième   sémaphore   de
       l’ensemble)  identifié  par  semid.  (Les  sémaphores  sont numérotés à
       partir de zéro.)

       La fonction a trois ou quatre arguments, selon la valeur de cmd.  Quand
       il  y  en  a quatre, le quatrième est de type union semun. Le programme
       appelant doit définir cette union de la façon suivante :

           union semun {
               int              val;    /* Valeur pour SETVAL */
               struct semid_ds *buf;    /* Tampon pour IPC_STAT, IPC_SET */
               unsigned short  *array;  /* Tableau pour GETALL, SETALL */
               struct seminfo  *__buf;  /* Tampon pour IPC_INFO
                                           (spécifique à Linux) */
           };

       La structure semid_ds est définie dans <sys/sem.h> comme suit:

           struct semid_ds {
               struct ipc_perm sem_perm;   /* Permissions d’accès */
               time_t          sem_otime;  /* Heure dernier semop() */
               time_t          sem_ctime;  /* Heure dernier changement */
               unsigned short  sem_nsems;  /* Nombre de sémaphores dans l’ensemble */
           };

       La structure ipc_perm est définie dans <sys/ipc.h> de la façon suivante
       (les champs en gras peuvent être modifiés en utilisant IPC_SET):

           struct ipc_perm {
               key_t          __key; /* Clé fournie à semget(2) */
               uid_t          uid;   /* UID effectif du propriétaire */
               gid_t          gid;   /* GID effectif du propriétaire */
               uid_t          cuid;  /* UID effectif du créateur */
               gid_t          cgid;  /* GID effectif du créateur */
               unsigned short mode;  /* Permissions */
               unsigned short __seq; /* Numéro de séquence */
           };

       Les valeurs autorisées pour cmd sont :

       IPC_STAT  Copier  dans  la  structure  semid_ds  pointée par arg.buf la
                 structure  de  données  du  noyau  concernant  l’ensemble  de
                 sémaphores.  L’argument semnum est alors ignoré. Le processus
                 appelant doit avoir des privilèges de lecture sur le  jeu  de
                 sémaphores.

       IPC_SET   Écrire  les  valeurs  de certains des membres de la structure
                 semid_ds pointée par arg.buf dans la structure de données  du
                 noyau  associée  à  cet  ensemble de sémaphores, en mettant à
                 jour  son  champ  sem_ctime.  Les  membres  suivants  de   la
                 structure  sont  mis  à jour : sem_perm.uid, sem_perm.gid, et
                 les neuf  bits  de  poids  faibles  de  sem_perm.mode.  L’UID
                 effectif   du   processus   appelant   doit   être  celle  du
                 propriétaire (sem_perm.uid) ou du créateur (sem_perm.cuid) de
                 l’ensemble de sémaphores, ou l’appelant doit être privilégié.
                 L’argument semnum est ignoré.

       IPC_RMID  Supprimer   immédiatement   l’ensemble   de   sémaphores   en
                 réveillant  tous  les processus en attente dans semop(2). Ils
                 obtiendront un code d’erreur, et errno aura la valeur  EIDRM.
                 L’UID  effectif du processus appelant doit être soit celui du
                 créateur  ou  du  propriétaire  du  jeu  de  sémaphores,   ou
                 l’appelant   doit  être  privilégié.  L’argument  semnum  est
                 ignoré.

       IPC_INFO (spécifique à Linux)
                 Renvoyer des informations sur les limites  et  paramètres  du
                 système  concernant  les sémaphores dans la structure pointée
                 par arg.__buf. Cette structure est de  type  seminfo,  défini
                 dans <sys/sem.h> si la macro _GNU_SOURCE est définie :

                     struct  seminfo {
                         int semmap;  /* Nombre d’entrées dans la table de sémaphores ;
                                         pas utilisé par le noyau */
                         int semmni;  /* Nombre maximal d’ensembles de sémaphores */
                         int semmns;  /* Nombre maximal de sémaphores dans tous les
                                         ensembles de sémaphores */
                         int semmnu;  /* Nombre maximal de structures « undo »
                                         sur le système ; pas utilisé par le noyau */
                         int semmsl;  /* Nombre maximal de sémaphores dans un ensemble */
                         int semopm;  /* Nombre maximal d’opérations pour semop(2) */
                         int semume;  /* Nombre maximal d’entrées « undo » par
                                         processus ; pas utilisé par le noyau */
                         int semusz;  /* Taille de struct sem_undo */
                         int semvmx;  /* Valeur maximale d’un sémaphore */
                         int semaem;  /* Valeur maximale pouvant être enregistrée pour
                                         la mise à jour d’un sémaphore (SEM_UNDO) */
                     };

                 Les  paramètres semmsl, semmns, semopm et semmni peuvent être
                 modifiés via /proc/sys/kernel/sem ; voir proc(5) pour plus de
                 détails.

       SEM_INFO (spécifique à Linux)
                 Renvoyer   une   structure   seminfo   contenant   les  mêmes
                 informations que pour IPC_INFO, sauf les champs suivants  qui
                 sont remplis avec des informations sur les ressources système
                 actuellement utilisées par les sémaphores : le  champ  semusz
                 renvoie  le  nombre  d’ensemble de sémaphores existant sur le
                 système, et le  champ  semaem  renvoie  le  nombre  total  de
                 sémaphores  dans tous les ensembles de sémaphores du système.

       SEM_STAT (spécifique à Linux)
                 Renvoyer  une  structure  semid_ds   comme   pour   IPC_STAT.
                 Cependant,  l’argument  semid  n’est  pas  un  identifiant de
                 sémaphore, mais un index dans la table interne du  noyau  qui
                 contient   des   informations   sur  tous  les  ensembles  de
                 sémaphores du système.

       GETALL    Renvoyer la valeur semval de chaque sémaphore  de  l’ensemble
                 dans  le  tableau arg.array. L’argument semnum est ignoré. Le
                 processus appelant doit avoir des privilèges de  lecture  sur
                 le jeu de sémaphores.

       GETNCNT   Renvoyer  la  valeur de semncnt pour le semnum-ième sémaphore
                 de l’ensemble (c’est-à-dire le nombre de processus en attente
                 d’une   incrémentation   du   champ   semval  du  semnum-ième
                 sémaphore). Le processus appelant doit avoir  des  privilèges
                 de lecture sur le jeu de sémaphores.

       GETPID    Renvoyer la valeur de sempid pour le semnum-ième sémaphore de
                 l’ensemble (c’est-à-dire le PID du processus ayant exécuté le
                 dernier appel système semop(2) sur le semnum-ième sémaphore).
                 Le processus appelant doit avoir des  privilèges  de  lecture
                 sur le jeu de sémaphores.

       GETVAL    Renvoyer  la  valeur du champ semval du semnum-ième sémaphore
                 de  l’ensemble.  Le  processus  appelant   doit   avoir   des
                 privilèges de lecture sur le jeu de sémaphores.

       GETZCNT   Renvoyer  la valeur du champ semzcnt du semnum-ième sémaphore
                 de l’ensemble (c’est-à-dire le nombre de processus  attendant
                 que  le  champ semval du semnum-ième sémaphore revienne à 0).
                 Le processus appelant doit avoir des  privilèges  de  lecture
                 sur le jeu de sémaphores.

       SETALL    Positionner  le  champ  semval  de  tous  les  sémaphores  de
                 l’ensemble en utilisant le tableau arg.array et en mettant  à
                 jour  le champ sem_ctime de la structure semid_ds de contrôle
                 du jeu de sémaphores. Les  entrées  «undo »  (voir  semop(2))
                 sont  effacées  de  tous  les  processus  pour les sémaphores
                 modifiés. Si la nouvelle valeur du  sémaphore  permet  à  des
                 appels   semop(2)  bloqués  dans  d’autres  processus  de  se
                 poursuivre, ces processus sont réveillés.  L’argument  semnum
                 est  ignoré.  Le processus appelant doit avoir des privilèges
                 d’écriture sur le jeu de sémaphores.

       SETVAL    Placer la valeur arg.val dans le champ semval du  semnum-ième
                 sémaphore  de l’ensemble en mettant à jour le champ sem_ctime
                 dans la structure semid_ds associée au jeu de sémaphores. Les
                 entrées « undo » sont effacées de tous les processus pour les
                 sémaphores modifiés.  Si  la  nouvelle  valeur  du  sémaphore
                 permet  à des appels semop(2) bloqués dans d’autres processus
                 de se poursuivre, ces processus sont réveillés. Le  processus
                 appelant  doit  avoir des privilèges d’écriture sur le jeu de
                 sémaphores.

VALEUR RENVOYÉE

       semctl() renvoie -1 s’il échoue  auquel  cas  errno  contient  le  code
       d’erreur.

       Autrement, l’appel système renvoie une valeur non négative dépendant de
       l’argument cmd :

       GETNCNT     la valeur de semncnt.

       GETPID      La valeur sempid.

       GETVAL      La valeur semval.

       GETZCNT     La valeur semzcnt.

       IPC_INFO    Le plus grand indice d’une entrée utilisée  dans  la  table
                   interne  du  noyau  contenant des informations sur tous les
                   ensembles de sémaphores.  Cette  information  peut  ensuite
                   être  utilisée  pour  des opérations SEM_STAT répétées afin
                   d’obtenir  des  informations  sur  tous  les  ensembles  de
                   sémaphores du système.

       SEM_INFO    Comme pour IPC_INFO.

       SEM_STAT    L’identifiant  de  l’ensemble  de  sémaphores dont l’indice
                   était donné dans semid.

       Toutes les autres commandes cmd renvoient zéro en cas de réussite.

ERREURS

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

       EACCES L’argument cmd a l’une des  valeurs  suivantes  GETALL,  GETPID,
              GETVAL,  GETNCNT, GETZCNT, IPC_STAT, SEM_STAT, SETALL, ou SETVAL
              et le processus appelant n’a pas les permissions nécessaires sur
              le jeu de sémaphore et n’a pas la capacité CAP_IPC_OWNER.

       EFAULT arg.buf  ou arg.array pointent en dehors de l’espace d’adressage
              accessible.

       EIDRM  Le jeu de sémaphores a été supprimé.

       EINVAL Valeur de cmd ou semid invalide. Ou  bien,  pour  une  opération
              SEM_STAT,  l’indice  indiqué  dans  semid  référence  une entrée
              actuellement inutilisée de la table.

       EPERM  L’argument cmd réclame les commandes IPC_SET  ou  IPC_RMID  mais
              l’UID  effectif  du  processus  appelant  n’est  pas le créateur
              (comme  dans  sem_perm.cuid)  ou  le  propriétaire  (comme  dans
              sem_perm.uid)  du  jeu de sémaphores, et le processus n’a pas la
              capacité CAP_SYS_ADMIN.

       ERANGE L’argument cmd réclame les commandes  SETALL  ou  SETVAL  et  la
              valeur  de  semval (pour l’ensemble ou pour certains sémaphores)
              est inférieure à 0 ou supérieur à la valeur SEMVMX.

CONFORMITÉ

       SVr4, POSIX.1-2001.

NOTES

       Les appels système IPC_INFO, SEM_STAT et SEM_INFO sont utilisés par  le
       programme  ipcs(8)  pour  fournir  des  informations sur les ressources
       allouées. Ceci peut changer dans le  futur,  en  utilisant  l’interface
       d’un système de fichiers proc.

       Divers  champs  de  la struct semid_ds étaient de type short sous Linux
       2.2 et sont devenus des long sous Linux 2.4. Pour en tirer  parti,  une
       recompilation  sous  glibc 2.1.91 ou ultérieure doit suffire. (Le noyau
       distingue les anciens et nouveaux appels par  un  drapeau  IPC_64  dans
       cmd.)

       Dans  certaines  versions  antérieures  de  glibc,  l’union semun était
       définie dans <sys/sem.h>, mais POSIX.1-2001  documente  que  l’appelant
       doit  définir  cette  union.  Dans les versions de glibc où cette union
       n’est pas définie,  la  macro  _SEM_SEMUN_UNDEFINED  est  définie  dans
       <sys/sem.h>.

       La limite suivante influe sur l’appel système semctl() :

       SEMVMX Valeur   maximale  pour  semval  dépendant  de  l’implémentation
              (généralement 32767).

       Pour améliorer la portabilité, il vaut mieux invoquer toujours semctl()
       avec quatre arguments.

VOIR AUSSI

       ipc(2), semget(2), semop(2), capabilities(7), sem_overview(7), svipc(7)

COLOPHON

       Cette page fait partie de  la  publication  3.17  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> ».