Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       semctl - Operations de controle sur les semaphores

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'operation de controle indiquee par cmd sur
       l'ensemble  de  semaphores  (ou  sur  le   semnum-ieme   semaphore   de
       l'ensemble)  identifie  par  semid.  (Les  semaphores  sont numerotes a
       partir de zero.)

       La fonction a trois ou quatre arguments, selon la valeur de cmd.  Quand
       il  y  en  a quatre, le quatrieme est de type union semun. Le programme
       appelant doit definir cette union de la facon 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
                                           (specifique a Linux) */
           };

       La structure semid_ds est definie dans <sys/sem.h> comme suit :

           struct semid_ds {
               struct ipc_perm sem_perm;   /* Permissions d'acces */
               time_t          sem_otime;  /* Heure dernier semop() */
               time_t          sem_ctime;  /* Heure dernier changement */
               unsigned short  sem_nsems;  /* Nombre de semaphores dans l'ensemble */
           };

       La structure ipc_perm est definie dans <sys/ipc.h> de la facon suivante
       (les champs en gras peuvent etre modifies en utilisant IPC_SET) :

           struct ipc_perm {
               key_t          __key; /* Cle fournie a semget(2) */
               uid_t          uid;   /* UID effectif du proprietaire */
               gid_t          gid;   /* GID effectif du proprietaire */
               uid_t          cuid;  /* UID effectif du createur */
               gid_t          cgid;  /* GID effectif du createur */
               unsigned short mode;  /* Permissions */
               unsigned short __seq; /* Numero de sequence */
           };

       Les valeurs autorisees pour cmd sont :

       IPC_STAT  Copier  dans  la  structure  semid_ds  pointee par arg.buf la
                 structure  de  donnees  du  noyau  concernant  l'ensemble  de
                 semaphores.  L'argument semnum est alors ignore. Le processus
                 appelant doit avoir des privileges de lecture sur le  jeu  de
                 semaphores.

       IPC_SET   Ecrire  les  valeurs  de certains des membres de la structure
                 semid_ds pointee par arg.buf dans la structure de donnees  du
                 noyau  associee  a  cet  ensemble de semaphores, en mettant a
                 jour  son  champ  sem_ctime.  Les  membres  suivants  de   la
                 structure  sont  mis  a 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   etre  celle  du
                 proprietaire (sem_perm.uid) ou du createur (sem_perm.cuid) de
                 l'ensemble de semaphores, ou l'appelant doit etre privilegie.
                 L'argument semnum est ignore.

       IPC_RMID  Supprimer   immediatement   l'ensemble   de   semaphores   en
                 reveillant  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 etre soit celui du
                 createur  ou  du  proprietaire  du  jeu  de  semaphores,   ou
                 l'appelant   doit  etre  privilegie.  L'argument  semnum  est
                 ignore.

       IPC_INFO (specifique a Linux)
                 Renvoyer des informations sur les limites  et  parametres  du
                 systeme  concernant  les semaphores dans la structure pointee
                 par arg.__buf. Cette structure est de  type  seminfo,  defini
                 dans <sys/sem.h> si la macro _GNU_SOURCE est definie :

                     struct  seminfo {
                         int semmap;  /* Nombre d'entrees dans la table de semaphores ;
                                         pas utilise par le noyau */
                         int semmni;  /* Nombre maximal d'ensembles de semaphores */
                         int semmns;  /* Nombre maximal de semaphores dans tous les
                                         ensembles de semaphores */
                         int semmnu;  /* Nombre maximal de structures << undo >>
                                         sur le systeme ; pas utilise par le noyau */
                         int semmsl;  /* Nombre maximal de semaphores dans un ensemble */
                         int semopm;  /* Nombre maximal d'operations pour semop(2) */
                         int semume;  /* Nombre maximal d'entrees << undo >> par
                                         processus ; pas utilise par le noyau */
                         int semusz;  /* Taille de struct sem_undo */
                         int semvmx;  /* Valeur maximale d'un semaphore */
                         int semaem;  /* Valeur maximale pouvant etre enregistree pour
                                         la mise a jour d'un semaphore (SEM_UNDO) */
                     };

                 Les  parametres semmsl, semmns, semopm et semmni peuvent etre
                 modifies via /proc/sys/kernel/sem ;  consultez  proc(5)  pour
                 plus de details.

       SEM_INFO (specifique a Linux)
                 Renvoyer   une   structure   seminfo   contenant   les  memes
                 informations que pour IPC_INFO, sauf les champs suivants  qui
                 sont remplis avec des informations sur les ressources systeme
                 actuellement utilisees par les semaphores : le  champ  semusz
                 renvoie  le  nombre  d'ensemble de semaphores existant sur le
                 systeme, et le  champ  semaem  renvoie  le  nombre  total  de
                 semaphores dans tous les ensembles de semaphores du systeme.

       SEM_STAT (specifique a Linux)
                 Renvoyer   une   structure   semid_ds  comme  pour  IPC_STAT.
                 Cependant, l'argument  semid  n'est  pas  un  identifiant  de
                 semaphore,  mais  un index dans la table interne du noyau qui
                 contient  des  informations  sur  tous   les   ensembles   de
                 semaphores du systeme.

       GETALL    Renvoyer  la  valeur semval de chaque semaphore de l'ensemble
                 dans le tableau arg.array. L'argument semnum est  ignore.  Le
                 processus  appelant  doit avoir des privileges de lecture sur
                 le jeu de semaphores.

       GETNCNT   L'appel  systeme  renvoie  la  valeur  de  semncnt  pour   le
                 semnum-ieme  semaphore  de l'ensemble (c'est-a-dire le nombre
                 de processus attendant pour une  augmentation  de  semval  du
                 semnum-ieme  semaphore  de l'ensemble). Le processus appelant
                 doit  avoir  des  privileges  de  lecture  sur  le   jeu   de
                 semaphores.

       GETPID    Renvoyer la valeur de sempid pour le semnum-ieme semaphore de
                 l'ensemble (c'est-a-dire le PID du processus ayant execute le
                 dernier appel systeme semop(2) sur le semnum-ieme semaphore).
                 Le processus appelant doit avoir des  privileges  de  lecture
                 sur le jeu de semaphores.

       GETVAL    Renvoyer  la  valeur du champ semval du semnum-ieme semaphore
                 de  l'ensemble.  Le  processus  appelant   doit   avoir   des
                 privileges de lecture sur le jeu de semaphores.

       GETZCNT   Renvoyer  la valeur du champ semzcnt du semnum-ieme semaphore
                 de l'ensemble (c'est-a-dire le nombre de processus  attendant
                 que  le  champ semval du semnum-ieme semaphore revienne a 0).
                 Le processus appelant doit avoir des  privileges  de  lecture
                 sur le jeu de semaphores.

       SETALL    Positionner  le  champ  semval  de  tous  les  semaphores  de
                 l'ensemble en utilisant le tableau arg.array et en mettant  a
                 jour  le champ sem_ctime de la structure semid_ds de controle
                 du jeu  de  semaphores.  Les  entrees  << undo >>  (consultez
                 semop(2))  sont  effacees  de  tous  les  processus  pour les
                 semaphores modifies.  Si  la  nouvelle  valeur  du  semaphore
                 permet  a des appels semop(2) bloques dans d'autres processus
                 de se poursuivre, ces processus  sont  reveilles.  L'argument
                 semnum  est  ignore.  Le  processus  appelant  doit avoir des
                 privileges d'ecriture sur le jeu de semaphores.

       SETVAL    Placer la valeur arg.val dans le champ semval du  semnum-ieme
                 semaphore  de l'ensemble en mettant a jour le champ sem_ctime
                 dans la structure semid_ds associee au jeu de semaphores. Les
                 entrees  << undo >>  sont effacees de tous les processus pour
                 les semaphores modifies. Si la nouvelle valeur  du  semaphore
                 permet  a des appels semop(2) bloques dans d'autres processus
                 de se poursuivre, ces processus sont reveilles. Le  processus
                 appelant  doit  avoir des privileges d'ecriture sur le jeu de
                 semaphores.

VALEUR RENVOY'EE

       semctl() renvoie -1 s'il echoue  auquel  cas  errno  contient  le  code
       d'erreur.

       Autrement, l'appel systeme renvoie une valeur non negative dependant 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 entree utilisee  dans  la  table
                   interne  du  noyau  contenant des informations sur tous les
                   ensembles de semaphores.  Cette  information  peut  ensuite
                   etre  utilisee  pour  des operations SEM_STAT repetees afin
                   d'obtenir  des  informations  sur  tous  les  ensembles  de
                   semaphores du systeme.

       SEM_INFO    Comme pour IPC_INFO.

       SEM_STAT    L'identifiant  de  l'ensemble  de  semaphores dont l'indice
                   etait donne dans semid.

       Toutes les autres commandes cmd renvoient zero en cas de reussite.

ERREURS

       En cas d'echec, 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 necessaires sur
              le jeu de semaphore et n'a pas la capacite CAP_IPC_OWNER.

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

       EIDRM  Le jeu de semaphores a ete supprime.

       EINVAL Valeur de cmd ou semid invalide. Ou  bien,  pour  une  operation
              SEM_STAT,  l'indice  indique  dans  semid  reference  une entree
              actuellement inutilisee de la table.

       EPERM  L'argument cmd reclame les commandes IPC_SET  ou  IPC_RMID  mais
              l'UID  effectif  du  processus  appelant  n'est  pas le createur
              (comme  dans  sem_perm.cuid)  ou  le  proprietaire  (comme  dans
              sem_perm.uid)  du  jeu de semaphores, et le processus n'a pas la
              capacite CAP_SYS_ADMIN.

       ERANGE L'argument cmd reclame les commandes  SETALL  ou  SETVAL  et  la
              valeur  de  semval (pour l'ensemble ou pour certains semaphores)
              est inferieure a 0 ou superieur a la valeur SEMVMX.

CONFORMIT'E

       SVr4, POSIX.1-2001.

NOTES

       Les appels systeme IPC_INFO, SEM_STAT et SEM_INFO sont utilises par  le
       programme  ipcs(1)  pour  fournir  des  informations sur les ressources
       allouees. Ceci peut changer dans le  futur,  en  utilisant  l'interface
       d'un systeme de fichiers proc.

       Divers  champs  de  la struct semid_ds etaient 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 ulterieure doit suffire. (Le noyau
       distingue les anciens et nouveaux appels par  un  drapeau  IPC_64  dans
       cmd.)

       Dans  certaines  versions  anterieures  de  glibc,  l'union semun etait
       definie dans <sys/sem.h>, mais POSIX.1-2001  documente  que  l'appelant
       doit  definir  cette  union.  Dans les versions de glibc ou cette union
       n'est pas definie,  la  macro  _SEM_SEMUN_UNDEFINED  est  definie  dans
       <sys/sem.h>.

       La limite suivante influe sur l'appel systeme semctl() :

       SEMVMX Valeur   maximale  pour  semval  dependant  de  l'implementation
              (generalement 32767).

       Pour ameliorer la portabilite, 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.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   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'equipe francophone de traduction de Debian (2006-2009).

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.