Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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> >>.