semctl
Opérations de contrôle sur les sémaphores System V
- Provided by: manpages-fr-dev (Version: 3.57d1p1-1)
- Source: manpages-fr
- Report a bug
Opérations de contrôle sur les sémaphores System V
#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semctl(int semid, int semnum, int cmd, ...);
Cette fonction effectue l'opération de contrôle indiquée par cmd 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 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 long sem_nsems; /* Nombre de sémaphores dans l'ensemble */
};
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 valeurs autorisées pour cmd sont :
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.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 :
Toutes les autres commandes cmd renvoient zéro en cas de réussite.
En cas d'échec, errno prend l'une des valeurs suivantes :
SVr4, POSIX.1-2001.
POSIX.1-2001 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 et de type unsigned long.
L'inclusion de <sys/types.h> et <sys/ipc.h> n'est pas nécessaire sous Linux et n'est exigée par aucune version de POSIX. Cependant, certaines implémentations anciennes nécessitent l'inclusion de ces fichiers d'en-tête, et le SVID documente aussi leur inclusion. Les applications ayant pour but d'être portables pourraient inclure ces fichiers d'en-tête.
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() :
Pour améliorer la portabilité, il vaut mieux invoquer toujours semctl() avec quatre arguments.
ipc(2), semget(2), semop(2), capabilities(7), sem_overview(7), svipc(7)
Cette page fait partie de la publication 3.57 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <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> ».