Provided by: manpages-fr-dev_3.32d0.2p4-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 ; consultez 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   L'appel  système  renvoie  la valeur de semncnt pour le semnum-ième sémaphore de
                 l'ensemble (c'est-à-dire le nombre de processus attendant pour une  augmentation
                 de  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.

       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 »  (consultez
                 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(1)
       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.32 du projet man-pages Linux.  Une  description
       du  projet  et  des  instructions  pour  signaler  des  anomalies  peuvent être trouvées à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

       Christophe  Blaess  <URL:http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <URL: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> ».