.\" -*- coding: UTF-8 -*- .\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it) .\" and Copyright (C) 2020 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified Tue Oct 22 17:54:56 1996 by Eric S. Raymond .\" Modified 1 Jan 2002, Martin Schulze .\" Modified 4 Jan 2002, Michael Kerrisk .\" Modified, 27 May 2004, Michael Kerrisk .\" Added notes on capability requirements .\" Modified, 11 Nov 2004, Michael Kerrisk .\" Language and formatting clean-ups .\" Added notes on /proc files .\" Rewrote BUGS note about semget()'s failure to initialize .\" semaphore values .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH semget 2 "15 juin 2024" "Pages du manuel de Linux 6.9.1" .SH NOM semget \- Obtenir l'identifiant d'un ensemble de sémaphores System V .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .fi .P \fBint semget(key_t \fP\fIkey\fP\fB,\fP \fBint \fP\fInsems\fP\fB,\fP \fBint \fP\fIsemflg\fP\fB);\fP .SH DESCRIPTION L'appel système \fBsemget\fP() renvoie l'identifiant de l'ensemble de sémaphores System V associé à la valeur de clé \fIkey\fP. Cela peut servir pour obtenir l'identifiant d'un ensemble de sémaphores créé précédemment (lorsque \fIsemflg\fP vaut 0 et que \fIkey\fP n'a pas la valeur \fBIPC_PRIVATE\fP) ou pour créer un nouvel ensemble. .P Un nouvel ensemble contenant \fInsems\fP sémaphores est créé si \fIkey\fP a la valeur \fBIPC_PRIVATE\fP ou si aucun ensemble n'est associé à \fIkey\fP, et si l'option \fBIPC_CREAT\fP est présente dans \fIsemflg\fP. .P Si \fIsemflg\fP contient à la fois \fBIPC_CREAT\fP et \fBIPC_EXCL\fP et qu'un ensemble de sémaphores existe déjà pour la clé \fIkey\fP, \fBsemget\fP() échoue et \fIerrno\fP vaut \fBEEXIST\fP. (Cela est analogue à l'effet de la combinaison \fBO_CREAT | O_EXCL\fP pour \fBopen\fP(2).) .P Pendant la création, les 9 bits de poids faible de l'argument \fIsemflg\fP définissent les permissions d'accès (pour le propriétaire, le groupe et les autres) au jeu de sémaphores, en utilisant le même format et la même signification que les droits d'accès dans \fBopen\fP(2). Les permissions d'exécution ne sont pas utilisées par le système, et pour un jeu de sémaphores, l'autorisation d'écriture signifie autorisation de modification. .P Durant la création, la structure de données \fIsemid_ds\fP (consultez \fBsemctl\fP(2)) contrôlant le jeu de sémaphores est initialisée ainsi par \fBsemget\fP()\ : .IP \- 3 \fIsem_perm.cuid\fP et \fIsem_perm.uid\fP contiennent l'UID effectif du processus appelant. .IP \- \fIsem_perm.cgid\fP et \fIsem_perm.gid\fP contiennent le GID effectif du processus appelant. .IP \- Les 9 bits de poids faible de \fIsem_perm.mode\fP contiennent les 9 bits de poids faible de \fIsemflg\fP. .IP \- \fIsem_nsems\fP reçoit la valeur \fInsems\fP. .IP \- \fIsem_otime\fP est mis à 0. .IP \- \fIsem_ctime\fP est rempli avec l'heure actuelle. .P L'argument \fInsems\fP peut valoir 0 (ignoré) si l'appel système n'est pas une création d'ensemble de sémaphores. Autrement \fInsems\fP doit être supérieur à 0 et inférieur ou égal au nombre maximal de sémaphores par ensemble (\fBSEMMSL\fP). .P .\" and a check is made to see if it is marked for destruction. Si le jeu de sémaphores existe déjà, les permissions d'accès sont contrôlées. .SH "VALEUR RENVOYÉE" En cas de réussite, \fBsemget\fP() renvoie l'identifiant de l'ensemble de sémaphores (un entier positif). En cas d'échec, il renvoie \fB\-1\fP et \fIerrno\fP contient le code d'erreur. .SH ERREURS .TP \fBEACCES\fP Le jeu de sémaphores associé à \fIkey\fP existe, mais le processus n'a aucun droit d'accès sur lui 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 \fBEEXIST\fP .\" .TP .\" .B EIDRM .\" The semaphore set is marked to be deleted. \fBIPC_CREAT\fP et \fBIPC_EXCL\fP ont été tous les deux indiqués dans \fIsemflag\fP, mais un ensemble de sémaphores de clé \fIkey\fP existe déjà. .TP \fBEINVAL\fP \fInsems\fP est inférieur à zéro ou supérieur à la limite du nombre de sémaphores par ensemble, (\fBSEMMSL\fP). .TP \fBEINVAL\fP Un ensemble de sémaphores identifié par \fIkey\fP existe déjà, mais \fInsems\fP est plus grand que le nombre de sémaphores par ensemble. .TP \fBENOENT\fP Aucun jeu de sémaphores associé a \fIkey\fP n'existe et l'argument \fIsemflg\fP ne précise pas \fBIPC_CREAT\fP. .TP \fBENOMEM\fP Pas assez de mémoire pour créer les structures nécessaires. .TP \fBENOSPC\fP Le nombre maximal de jeux de sémaphores sur le système (\fBSEMMNI\fP) est atteint, ou le nombre maximal de sémaphores sur le système est atteint (\fBSEMMNS\fP). .SH STANDARDS POSIX.1\-2008. .SH HISTORIQUE .\" SVr4 documents additional error conditions EFBIG, E2BIG, EAGAIN, .\" ERANGE, EFAULT. SVr4, POSIX.1\-2001. .SH NOTES .\" \fBIPC_PRIVATE\fP n'est pas une option, mais un objet de type \fIkey_t\fP. Si l'on utilise cette valeur spéciale dans l'argument \fIkey\fP, l'appel système ne se préoccupera que des 9 bits de poids faible de \fIsemflg\fP et tentera de créer un nouveau jeu de sémaphores. .SS "Initialisation des sémaphores" .\" In truth, every one of the many implementations that I've tested sets .\" the values to zero, but I suppose there is/was some obscure .\" implementation out there that does not. Les valeurs des sémaphores dans un ensemble qui vient d'être créé sont indéterminées (POSIX.1\-2001 et POSIX.1\-2008 sont explicites sur ce point, bien que POSIX.1\-2008 note que de futures versions du standard pourraient exiger des implémentations qu'elles initialisent les sémaphores à 0). Même si Linux, comme de nombreuses autres implémentations, initialise les valeurs des sémaphores à 0, une application portable ne peut pas compter sur cette initialisation\ : elle doit initialiser explicitement les sémaphores à la valeur souhaitée. .P .\" L'initialisation peut être effectuée avec les opérations \fBSETVAL\fP ou \fBSETALL\fP de la fonction \fBsemctl\fP(2). Lorsque plusieurs concurrents ne savent pas qui sera le premier à initialiser le jeu de sémaphores, il est possible de vérifier que le membre \fIsem_otime\fP de la structure récupérée par une opération \fBIPC_STAT\fP de \fBsemctl\fP(2) est non nul pour éviter les conditions de concurrence. .SS "Limites des sémaphores" Les limites suivantes de ressources concernent l'appel système \fBsemget\fP()\ : .TP \fBSEMMNI\fP .\" commit e843e7d2c88b7db107a86bd2c7145dc715c058f4 .\" This /proc file is not available in Linux 2.2 and earlier -- MTK Limite système du nombre de jeux de sémaphores. Avant Linux 3.19, la valeur par défaut pour cette limite était de 128. Depuis Linux 3.19, elle est de 32 000. Sous Linux, cette limite peut être lue et modifiée dans le quatrième champ de \fI/proc/sys/kernel/sem\fP. .TP \fBSEMMSL\fP .\" commit e843e7d2c88b7db107a86bd2c7145dc715c058f4 Nombre maximal de sémaphores par ensemble. Avant Linux 3.19, la valeur par défaut pour cette limite était de 250. Depuis Linux 3.19, elle est de 32 000. Sous Linux, cette limite peut être lue et modifiée dans le premier champ de \fI/proc/sys/kernel/sem\fP. .TP \fBSEMMNS\fP Limite système du nombre de sémaphores : dépend de la politique (sous Linux, cette limite peut être lue et modifiée dans le second champ de \fI/proc/sys/kernel/sem\fP). Le nombre de sémaphores est également limité par le produit de \fBSEMMSL\fP et \fBSEMMNI\fP. .SH BOGUES Le choix du nom \fBIPC_PRIVATE\fP est malheureux, \fBIPC_NEW\fP aurait mieux décrit sa fonction. .SH EXEMPLES Le programme montré ci\-dessous utilise \fBsemget\fP() pour créer un nouveau jeu de sémaphores ou récupère l'identifiant d'un jeu existant. Il génère la \fIkey\fP pour \fBsemget\fP() en utilisant \fBftok\fP(3). Les deux premiers arguments de la ligne de commande sont utilisés comme arguments de chemin \fIpathname\fP et \fIproj_id\fP pour \fBftok\fP(3). Le troisième argument de la ligne de commande est un entier qui spécifie l'argument \fInsems\fP pour \fBsemget\fP(). Les options en ligne de commande peuvent être utilisées pour spécifier les attributs \fBIPC_CREAT\fP (\fI\-c\fP) et \fBIPC_EXCL\fP (\fI\-x\fP) pour l'appel à \fBsemget\fP(). L'utilisation de ce programme est expliquée ci\-dessous. .P Sont créés en premier deux fichiers qui seront utilisés pour générer les clés avec \fBftok\fP(3), puis deux jeux de sémaphores utilisant ces fichiers et enfin, les jeux sont listés avec \fBipcs\fP(1): .P .in +4n .EX $ \fBtouch mykey mykey2\fP $ \fB./t_semget \-c mykey p 1\fP ID = 9 $ \fB./t_semget \-c mykey2 p 2\fP ID = 10 $ \fBipcs \-s\fP \& \-\-\-\-\-\- Semaphore Arrays \-\-\-\-\-\-\-\- key semid owner perms nsems 0x7004136d 9 mtk 600 1 0x70041368 10 mtk 600 2 .EE .in .P Ensuite, il est démontré que quand \fBsemctl\fP(2) reçoit la même \fIkey\fP (puisque générée par les mêmes arguments passés à \fBftok\fP(3)), il renvoie l'identifiant du jeu de sémaphore déjà existant : .P .in +4n .EX $ \fB./t_semget \-c mykey p 1\fP ID = 9 .EE .in .P Finalement, il est montré quel type de collision peut survenir si \fBftok\fP(3) reçoit des arguments de chemin \fIpathname\fP différents qui possèdent le même numéro d'inode : .P .in +4n .EX $ \fBln mykey link\fP $ \fBls \-i1 link mykey\fP 2233197 link 2233197 mykey $ \fB./t_semget link p 1\fP # Génère la même clé que \[aq]mykey\[aq] ID = 9 .EE .in .SS "Source du programme" .\" SRC BEGIN (t_semget.c) \& .EX /* t_semget.c \& Licensed under GNU General Public License v2 or later. */ #include #include #include #include #include \& static void usage(const char *pname) { fprintf(stderr, "Usage: %s [\-cx] pathname proj\-id num\-sems\[rs]n", pname); fprintf(stderr, " \-c Use IPC_CREAT flag\[rs]n"); fprintf(stderr, " \-x Use IPC_EXCL flag\[rs]n"); exit(EXIT_FAILURE); } \& int main(int argc, char *argv[]) { int semid, nsems, flags, opt; key_t key; \& flags = 0; while ((opt = getopt(argc, argv, "cx")) != \-1) { switch (opt) { case \[aq]c\[aq]: flags |= IPC_CREAT; break; case \[aq]x\[aq]: flags |= IPC_EXCL; break; default: usage(argv[0]); } } \& if (argc != optind + 3) usage(argv[0]); \& key = ftok(argv[optind], argv[optind + 1][0]); if (key == \-1) { perror("ftok"); exit(EXIT_FAILURE); } \& nsems = atoi(argv[optind + 2]); \& semid = semget(key, nsems, flags | 0600); if (semid == \-1) { perror("semget"); exit(EXIT_FAILURE); } \& printf("ID = %d\[rs]n", semid); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "VOIR AUSSI" \fBsemctl\fP(2), \fBsemop\fP(2), \fBftok\fP(3), \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 .