.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993, Giorgio Ciucci .\" Copyright 2004-2005, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH semctl 2 "8 février 2026" "Linux man\-pages 6.18" .SH NOM semctl \- Opérations de contrôle sur les sémaphores System V .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP,\ \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .P \fBint semctl(int \fP\fIsemid\fP\fB, int \fP\fIsemnum\fP\fB, int \fP\fIop\fP\fB, ...);\fP .fi .SH DESCRIPTION Cette fonction effectue l'opération de contrôle indiquée par \fIop\fP sur l'ensemble de sémaphores System V (ou sur le \fIsemnum\fP\-ième sémaphore de l'ensemble) identifié par \fIsemid\fP. (Les sémaphores sont numérotés à partir de zéro.) .P La fonction a trois ou quatre arguments, selon la valeur de \fIop\fP. Quand il y en a quatre, le quatrième est de type \fIunion semun\fP. Le \fIprogramme appelant\fP doit définir cette union de la façon suivante\ : .P .in +4n .EX 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) */ }; .EE .in .P La structure \fIsemid_ds\fP est définie dans \fI\fP comme suit : .P .in +4n .EX struct semid_ds { struct ipc_perm sem_perm; /* Ownership and permissions */ time_t sem_otime; /* Last semop time */ time_t sem_ctime; /* Creation time/time of last modification via semctl() */ unsigned long sem_nsems; /* # of semaphores in set */ }; .EE .in .P Les champs de la structure \fIsemid_ds\fP sont les suivants : .TP 11 \fIsem_perm\fP Il s'agit d'une structure \fIipc_perm\fP (voir plus bas) qui spécifie les d'accès sur le jeu de sémaphores. .TP \fIsem_otime\fP Heure du dernier appel système \fBsemop\fP(2). .TP \fIsem_ctime\fP Heure de création du jeu de sémaphores ou heure de la dernière opération \fBIPCSET\fP, \fBSETVAL\fP ou \fBSETALL\fP de \fBsemctl\fP(). .TP \fIsem_nsems\fP Nombre de sémaphores dans l'ensemble. Chaque sémaphore est référencé par un entier positif ou nul, compris dans l'intervalle \fB0\fP à \fIsem_nsems\-1\fP. .P La structure \fIipc_perm\fP est définie de la façon suivante (les champs en gras peuvent être modifiés en utilisant \fBIPC_SET\fP) : .P .in +4n .EX struct ipc_perm { key_t __key; /* Key supplied to semget(2) */ uid_t \f[B]uid\fR; /* Effective UID of owner */ gid_t \f[B]gid\fR; /* Effective GID of owner */ uid_t cuid; /* Effective UID of creator */ gid_t cgid; /* Effective GID of creator */ unsigned short \f[B]mode\fR; /* Permissions */ unsigned short __seq; /* Sequence number */ }; .EE .in .P Les 9 bits les moins significatifs du champ \fImode\fP de la structure \fIipc_perm\fP définissent les droits d'accès aux segments de la mémoire partagée. Les bits de permission sont les suivants : .TS l l. 0400 Lisible par l'utilisateur 0200 Droit d'écriture pour l'utilisateur 0040 Lisible par le groupe 0020 Autorisation d'écriture pour le groupe 0004 Lisible par les autres 0002 Écrit par d'autres .TE .P 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. .P Les valeurs autorisées pour \fIop\fP sont\ : .TP \fBIPC_STAT\fP Copier dans la structure \fIsemid_ds\fP pointée par \fIarg.buf\fP la structure de données du noyau concernant l'ensemble de sémaphores. L'argument \fIsemnum\fP est alors ignoré. Le processus appelant doit avoir des privilèges de lecture sur le jeu de sémaphores. .TP \fBIPC_SET\fP Écrire la valeur de certains membres de la structure \fIsemid_ds\fP pointés par \fIarg.buf\fP dans la structure de données du noyau associée à ce jeu de sémaphores, en mettant aussi à jour son membre \fIsem_ctime\fP. .IP Les membres suivants de la structure sont mis à jour : \fIsem_perm.uid\fP, \fIsem_perm.gid\fP et (les 9 bits de poids faible de) \fIsem_perm.mode\fP. .IP L'UID effectif du processus appelant doit correspondre au propriétaire (\fIsem_perm.uid\fP) ou au créateur (\fIsem_perm.cuid\fP) du jeu de sémaphores ou l'appelant doit être privilégié. L'argument \fIsemnum\fP est ignoré. .TP \fBIPC_RMID\fP Supprimer immédiatement l'ensemble de sémaphores en réveillant tous les processus en attente dans \fBsemop\fP(2). Ils obtiendront un code d'erreur, et \fIerrno\fP aura la valeur \fBEIDRM\fP. 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 \fIsemnum\fP est ignoré. .TP \fBIPC_INFO\fP (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 \fIarg.__buf\fP. Cette structure est de type \fIseminfo\fP, défini dans \fI\fP si la macro \fB_GNU_SOURCE\fP est définie\ : .IP .in +4n .EX struct seminfo { int semmap; /* Number of entries in semaphore map; unused within kernel */ int semmni; /* Maximum number of semaphore sets */ int semmns; /* Maximum number of semaphores in all semaphore sets */ int semmnu; /* System\-wide maximum number of undo structures; unused within kernel */ int semmsl; /* Maximum number of semaphores in a set */ int semopm; /* Maximum number of operations for semop(2) */ int semume; /* Maximum number of undo entries per process; unused within kernel */ int semusz; /* Size of struct sem_undo */ int semvmx; /* Maximum semaphore value */ int semaem; /* Max.\& value that can be recorded for semaphore adjustment (SEM_UNDO) */ }; .EE .in .IP Les paramètres \fIsemmsl\fP, \fIsemmns\fP, \fIsemopm\fP et \fIsemmni\fP peuvent être modifiés via \fI/proc/sys/kernel/sem\fP\ ; consultez \fBproc\fP(5) pour plus de détails. .TP \fBSEM_INFO\fP (spécifique à Linux) Renvoyer une structure \fIseminfo\fP contenant les mêmes informations que pour \fBIPC_INFO\fP, sauf les champs suivants qui sont remplis avec des informations sur les ressources système actuellement utilisées par les sémaphores\ : le champ \fIsemusz\fP renvoie le nombre d'ensembles de sémaphores existants sur le système, et le champ \fIsemaem\fP renvoie le nombre total de sémaphores dans tous les ensembles de sémaphores du système. .TP \fBSEM_STAT\fP (spécifique à Linux) Renvoyer une structure \fIsemid_ds\fP comme pour \fBIPC_STAT\fP. Cependant, l'argument \fIsemid\fP 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. .TP \fBSEM_STAT_ANY\fP (spécifique à Linux depuis Linux 4.17) Renvoyer une structure \fIsemid_ds\fP comme pour \fBSEM_STAT\fP. Néanmoins, l'accès en lecture pour \fIsemid\fP n'est pas vérifié dans \fIsem_perm.mode\fP ce qui signifie que tous les utilisateurs peuvent utiliser cette opération (de la même manière qu'ils peuvent lire \fI/proc/sysvipc/sem\fP pour obtenir la même information). .TP \fBGETALL\fP Renvoyer la valeur \fBsemval\fP de chaque sémaphore de l'ensemble dans le tableau \fIarg.array\fP. L'argument \fIsemnum\fP est ignoré. Le processus appelant doit avoir des privilèges de lecture sur le jeu de sémaphores. .TP \fBGETNCNT\fP Renvoyer la valeur du champ \fBsemzcnt\fP du \fIsemnum\fP\-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. .TP \fBGETPID\fP Renvoyer la valeur de \fBsempid\fP pour le \fIsemnum\fP\-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 VERSIONS). Le processus appelant doit avoir des privilèges de lecture sur le jeu de sémaphores. .TP \fBGETVAL\fP Renvoyer \fBsemval\fP (c'est\-à\-dire la valeur du sémaphore) pour le \fIsemnum\fP\-ième sémaphore de l'ensemble. Le processus appelant doit avoir des privilèges de lecture sur le jeu de sémaphores. .TP \fBGETZCNT\fP Renvoyer la valeur du champ \fBsemzcnt\fP du \fIsemnum\fP\-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. .TP \fBSETALL\fP Positionner la valeur du champ \fBsemval\fP de tous les sémaphores de l'ensemble en utilisant le tableau \fIarg.array\fP et en mettant à jour le champ \fIsem_ctime\fP de la structure \fIsemid_ds\fP de contrôle du jeu de sémaphores. Les entrées «\ undo\ » (consultez \fBsemop\fP(2)) sont effacées de tous les processus pour les sémaphores modifiés. Si la nouvelle valeur du sémaphore permet à des appels \fBsemop\fP(2) bloqués dans d'autres processus de se poursuivre, ces processus sont réveillés. L'argument \fIsemnum\fP est ignoré. Le processus appelant doit avoir des privilèges d'écriture sur le jeu de sémaphores. .TP \fBSETVAL\fP Positionner la valeur du sémaphore (\fBsemval\fP) à \fIarg.val\fP pour le \fIsemnum\fP\-ième sémaphore de l'ensemble en mettant aussi à jour le champ \fIsem_ctime\fP dans la structure \fIsemid_ds\fP 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 \fBsemop\fP(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. .SH "VALEUR RENVOYÉE" En cas de réussite, \fBsemctl\fP() renvoie une valeur non négative dépendant de l'argument \fIop\fP\ : .TP \fBGETNCNT\fP La valeur de \fBsemncnt\fP. .TP \fBGETPID\fP La valeur \fBsempid\fP. .TP \fBGETVAL\fP La valeur \fBsemval\fP. .TP \fBGETZCNT\fP La valeur \fBsemzcnt\fP. .TP \fBIPC_INFO\fP 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 \fBSEM_STAT\fP ou \fBSEM_STAT_ANY\fP répétées afin d'obtenir des informations sur tous les ensembles de sémaphores du système. .TP \fBSEM_INFO\fP Comme pour \fBIPC_INFO\fP. .TP \fBSEM_STAT\fP L'identifiant de l'ensemble de sémaphores dont l'indice était donné dans \fIsemid\fP. .TP \fBSEM_STAT_ANY\fP comme pour \fBSEM_STAT\fP .P Toutes les autres valeurs \fIop\fP renvoient \fB0\fP en cas de réussite. .P \fBsemctl\fP() renvoie \fB\-1\fP s'il échoue auquel cas \fIerrno\fP contient le code d'erreur. .SH ERREURS .TP \fBEACCES\fP L'argument \fIop\fP a l'une des valeurs suivantes \fBGETALL\fP, \fBGETPID\fP, \fBGETVAL\fP, \fBGETNCNT\fP, \fBGETZCNT\fP, \fBIPC_STAT\fP, \fBSEM_STAT\fP, \fBSEM_STAT_ANY\fP, \fBSETALL\fP ou \fBSETVAL\fP, et le processus appelant n'a pas les permissions nécessaires sur le jeu de sémaphores et n'a pas la capacité \fBCAP_IPC_OWNER\fP dans l'espace de noms utilisateur qui régit son espace de noms IPC. .TP \fBEFAULT\fP \fIarg.buf\fP ou \fIarg.array\fP pointent en dehors de l'espace d'adressage accessible. .TP \fBEIDRM\fP Le jeu de sémaphores a été supprimé. .TP \fBEINVAL\fP Valeur de \fIop\fP ou \fIsemid\fP non valable. Ou bien, pour une opération \fBSEM_STAT\fP, l'indice indiqué dans \fIsemid\fP référence une entrée actuellement inutilisée de la table. .TP \fBEPERM\fP L'argument \fIop\fP réclame la valeur \fBIPC_SET\fP ou \fBIPC_RMID\fP mais l'UID effectif du processus appelant n'est pas le créateur (comme dans \fIsem_perm.cuid\fP) ou le propriétaire (comme dans \fIsem_perm.uid\fP) du jeu de sémaphores, et le processus n'a pas la capacité \fBCAP_SYS_ADMIN\fP. .TP \fBERANGE\fP L'argument \fIop\fP réclame les commandes \fBSETALL\fP ou \fBSETVAL\fP et la valeur de \fBsemval\fP (pour l'ensemble ou pour certains sémaphores) est inférieure à 0 ou supérieure à la valeur \fBSEMVMX\fP. .SH VERSIONS .\" POSIX.1-2001, POSIX.1-2008 .\" POSIX.1 spécifie le champ \fIsem_nsems\fP de la structure \fIsemid_ds\fP comme de type \fIunsigned\ short\fP, 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 \fIunsigned\ long\fP. .SS "La valeur sempid" POSIX.1 définit \fIsempid\fP 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 \fBsemop\fP réussi, avec l'implication qu'aucune autre interface n'affecte la valeur \fIsempid\fP. .P .\" At least OpenSolaris (and, one supposes, older Solaris) and Darwin 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 \fIsempid\fP pour d'autres opérations qui mettent à jour la valeur d'un sémaphore : les opérations \fBSETVAL\fP et \fBSETALL\fP, ainsi que les ajustements de sémaphores exécutés en fin de processus du fait de l'utilisation de l'option \fBSEM_UNDO\fP (voir \fBsemop\fP(2)). .P .\" commit a5f4db877177d2a3d7ae62a7bac3a5a27e083d7f Linux modifie également \fIsempid\fP pour les opérations \fBSETVAL\fP et les ajustements de sémaphores. Cependant, de façon plutôt incohérente, le noyau ne mettait pas à jour \fIsempid\fP pour les opérations \fBSETALL\fP jusqu'à la version 4.5 de Linux incluse. Cela a été corrigé avec la version 4.6. .SH NORMES POSIX.1\-2024. .SH HISTORIQUE .\" SVr4 documents more error conditions EINVAL and EOVERFLOW. POSIX.1\-2001, SVr4. .P Various fields in a \fIstruct\ semid_ds\fP were typed as \fIshort\fP under Linux 2.2 and have become \fIlong\fP under Linux 2.4. To take advantage of this, a recompilation under glibc\-2.1.91 or later should suffice. (The kernel distinguishes old and new calls by an \fBIPC_64\fP flag in \fIop\fP.) .P .\" POSIX.1-2001, POSIX.1-2008 Dans certaines versions antérieures de la glibc, l'union \fIsemun\fP était définie dans \fI\fP, mais POSIX.1 documente que l'appelant doit définir cette union. Dans les versions de la glibc où cette union n'est \fIpas\fP définie, la macro \fB_SEM_SEMUN_UNDEFINED\fP est définie dans \fI\fP. .SH NOTES Les appels système \fBIPC_INFO\fP, \fBSEM_STAT\fP et \fBSEM_INFO\fP sont utilisés par le programme \fBipcs\fP(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 \fI/proc\fP. .P La limite suivante du système sur les jeux de sémaphore affecte l'appel système \fBsemctl\fP()\ : .TP \fBSEMVMX\fP Valeur maximale pour \fBsemval\fP dépendant de l'implémentation (généralement 32767). .P Pour améliorer la portabilité, il vaut mieux invoquer toujours \fBsemctl\fP() avec quatre arguments. .SH EXEMPLES Consultez \fBshmop\fP(2). .SH "VOIR AUSSI" \fBipc\fP(2), \fBsemget\fP(2), \fBsemop\fP(2), \fBcapabilities\fP(7), \fBsem_overview\fP(7), \fBsysvipc\fP(7) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Thomas Vincent et Jean-Pierre Giraud . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .