Man page - semctl(2)

Packages contains this manual

Available languages:

en fr pl ja

Manual

semctl

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
VERSIONS
La valeur sempid
STANDARDS
HISTORIQUE
NOTES
EXEMPLES
VOIR AUSSI
TRADUCTION

NOM

semctl - Opérations de contrÎle sur les sémaphores System V

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/sem.h>

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

DESCRIPTION

Cette fonction effectue l’opĂ©ration de contrĂŽle indiquĂ©e par op sur l’ensemble de sĂ©maphores System V (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 op . 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 de création/heure du */
dernier changement avec semctl() */
unsigned long sem_nsems; /* Nombre de sĂ©maphores dans l’ensemble */
};

Les champs de la structure semid_ds sont les suivants :

sem_perm

Il s’agit d’une structure ipc_perm (voir plus bas) qui spĂ©cifie les d’accĂšs sur le jeu de sĂ©maphores.

sem_otime

Heure du dernier appel systĂšme semop (2).

sem_ctime

Heure de création du jeu de sémaphores ou heure de la derniÚre opération IPCSET , SETVAL ou SETALL de semctl ().

sem_nsems

Nombre de sĂ©maphores dans l’ensemble. Chaque sĂ©maphore est rĂ©fĂ©rencĂ© par un entier positif ou nul, compris dans l’intervalle 0 Ă  sem_nsems-1 .

La structure ipc_perm est dĂ©finie 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 9 bits les moins significatifs du champ mode de la structure ipc_perm dĂ©finissent les droits d’accĂšs aux segments de la mĂ©moire partagĂ©e. Les bits de permission sont les suivants :

Image grohtml-3855498-1.png

En rĂ©alitĂ©, « écrire » signifie « modifier » pour un jeu de sĂ©maphores. Les bits 0100, 0010 et 0001 (les bits d’exĂ©cution) ne sont pas utilisĂ©s par le systĂšme.

Les valeurs autorisées pour op 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 la valeur de certains membres de la structure semid_ds pointĂ©s par arg.buf dans la structure de donnĂ©es du noyau associĂ©e Ă  ce jeu de sĂ©maphores, en mettant aussi Ă  jour son membre sem_ctime .

Les membres suivants de la structure sont mis à jour : sem_perm.uid , sem_perm.gid et (les 9 bits de poids faible de) sem_perm.mode .

L’UID effectif du processus appelant doit correspondre au propriĂ©taire ( sem_perm.uid ) ou au crĂ©ateur ( sem_perm.cuid ) du jeu 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’ensembles de sĂ©maphores existants 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.

SEM_STAT_ANY (spécifique à Linux depuis Linux 4.17)

Renvoyer une structure semid_ds comme pour SEM_STAT . NĂ©anmoins, l’accĂšs en lecture pour semid n’est pas vĂ©rifiĂ© dans sem_perm.mode ce qui signifie que tous les utilisateurs peuvent utiliser cette opĂ©ration (de la mĂȘme maniĂšre qu’ils peuvent lire /proc/sysvipc/sem pour obtenir la mĂȘme information).

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 du champ semzcnt du semnum -iĂšme sĂ©maphore de l’ensemble (c’est-Ă -dire le nombre de processus attendant que la valeur du sĂ©maphore augmente). 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. Il s’agit du PID du processus ayant exĂ©cutĂ© la derniĂšre opĂ©ration sur ce sĂ©maphore (voir les NOTES). Le processus appelant doit avoir des privilĂšges de lecture sur le jeu de sĂ©maphores.

GETVAL

Renvoyer semval (c’est-Ă -dire la valeur du sĂ©maphore) pour le 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 la valeur du sĂ©maphore revienne à 0). Le processus appelant doit avoir des privilĂšges de lecture sur le jeu de sĂ©maphores.

SETALL

Positionner la valeur du 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

Positionner la valeur du sĂ©maphore ( semval ) Ă  arg.val pour le semnum -iĂšme sĂ©maphore de l’ensemble en mettant aussi Ă  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

En cas de rĂ©ussite, semctl () renvoie une valeur non nĂ©gative dĂ©pendant de l’argument op :
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 ou SEM_STAT_ANY 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 .

SEM_STAT_ANY

comme pour SEM_STAT

Toutes les autres valeurs op renvoient 0 en cas de réussite.

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

ERREURS

EACCES

L’argument op a l’une des valeurs suivantes GETALL , GETPID , GETVAL , GETNCNT , GETZCNT , IPC_STAT , SEM_STAT , SEM_STAT_ANY , SETALL ou SETVAL , et le processus appelant n’a pas les permissions nĂ©cessaires sur le jeu de sĂ©maphores et n’a pas la capacitĂ© CAP_IPC_OWNER dans l’espace de noms utilisateur qui rĂ©git son espace de noms IPC.

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 op ou semid non valable. 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 op rĂ©clame la valeur 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 op 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Ă©rieure Ă  la valeur SEMVMX .

VERSIONS

POSIX.1 spécifie le champ sem_nsems de la structure semid_ds comme de type unsigned short , ce qui est suivi par de nombreux systÚmes. Ce champ était défini ainsi dans Linux 2.2 et dans les versions précédentes. Depuis Linux 2.4, ce champ est de type unsigned long .

La valeur sempid

POSIX.1 dĂ©finit sempid comme l’« ID du processus de la derniĂšre opĂ©ration » sur un sĂ©maphore, et note explicitement que cette valeur est rĂ©glĂ©e par un appel semop rĂ©ussi, avec l’implication qu’aucune autre interface n’affecte la valeur sempid .

Bien que certaines implĂ©mentations respectent le comportement dĂ©fini dans POSIX.1, d’autres ne le font pas (le tort revient ici probablement Ă  POSIX.1 qui n’a pas rĂ©ussi Ă  englober tous les comportements implĂ©mentĂ©s existants). Diverses autres implĂ©mentations mettent Ă©galement Ă  jour sempid pour d’autres opĂ©rations qui mettent Ă  jour la valeur d’un sĂ©maphore : les opĂ©rations SETVAL et SETALL , ainsi que les ajustements de sĂ©maphores exĂ©cutĂ©s en fin de processus du fait de l’utilisation de l’option SEM_UNDO (voir semop (2)).

Linux modifie Ă©galement sempid pour les opĂ©rations SETVAL et les ajustements de sĂ©maphores. Cependant, de façon plutĂŽt incohĂ©rente, le noyau ne mettait pas Ă  jour sempid pour les opĂ©rations SETALL jusqu’à la version 4.5 de Linux incluse. Cela a Ă©tĂ© corrigĂ© avec la version 4.6.

STANDARDS

POSIX.1-2008.

HISTORIQUE

POSIX.1-2001, SVr4.

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

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

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. Cela peut changer dans le futur, en utilisant l’interface d’un systĂšme de fichiers /proc .

La limite suivante du systĂšme sur les jeux de sĂ©maphore affecte 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.

EXEMPLES

Consultez shmop (2).

VOIR AUSSI

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

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Thomas Vincent <tvincent@debian.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .