.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993 .\" and Copyright 1993 Giorgio Ciucci .\" and Copyright 2004, 2005 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified 1993-07-28, Rik Faith .\" Modified 1993-11-28, Giorgio Ciucci .\" Modified 1997-01-31, Eric S. Raymond .\" Modified 2001-02-18, Andries Brouwer .\" Modified 2002-01-05, 2004-05-27, 2004-06-17, .\" Michael Kerrisk .\" Modified 2004-10-11, aeb .\" Modified, Nov 2004, Michael Kerrisk .\" Language and formatting clean-ups .\" Updated shmid_ds structure definitions .\" Added information on SHM_DEST and SHM_LOCKED flags .\" Noted that CAP_IPC_LOCK is not required for SHM_UNLOCK .\" since Linux 2.6.9 .\" Modified, 2004-11-25, mtk, notes on 2.6.9 RLIMIT_MEMLOCK changes .\" 2005-04-25, mtk -- noted aberrant Linux behavior w.r.t. new .\" attaches to a segment that has already been marked for deletion. .\" 2005-08-02, mtk: Added IPC_INFO, SHM_INFO, SHM_STAT descriptions. .\" 2018-03-20, dbueso: Added SHM_STAT_ANY description. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH shmctl 2 "15 décembre 2022" "Pages du manuel de Linux 6.03" .SH NOM shmctl \- Contrôler la mémoire partagée System\ V .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .PP \fBint shmctl(int \fP\fIshmid\fP\fB, int \fP\fIcmd\fP\fB, struct shmid_ds *\fP\fIbuf\fP\fB);\fP .fi .SH DESCRIPTION \fBshmctl\fP() effectue l'opération de contrôle indiquée par \fIcmd\fP sur le segment de mémoire partagée System\ V identifié par \fIshmid\fP. .PP L'argument \fIbuf\fP est un pointeur sur une structure \fIshmid_ds\fP, définie dans \fI\fP comme suit\ : .PP .in +4n .EX struct shmid_ds { struct ipc_perm shm_perm; /* Appartenance et droits */ size_t shm_segsz; /* Taille du segment (octets) */ time_t shm_atime; /* Dernier moment de rattachement */ time_t shm_dtime; /* Dernier moment de détachement */ time_t shm_ctime; /* Moment de la création ou de la dernière modification avec shmctl() */ pid_t shm_cpid; /* PID du créateur */ pid_t shm_lpid; /* PID du dernier shmat(2)/shmdt(2) */ shmatt_t shm_nattch; /* N. des attaches actuelles */ ... }; .EE .in .PP Les champs de la structure \fIshmid_ds\fP sont les suivants\ : .TP 12 \fIshm_perm\fP Il s'agit d'une structure \fIipc_perm\fP (voir ci\-dessous) qui indique les droits d'accès aux segments de la mémoire partagée. .TP \fIshm_segsz\fP Taille en octets du segment de mémoire partagée. .TP \fIshm_atime\fP Moment du dernier appel système \fBshmat\fP(2) qui a attaché ce segment. .TP \fIshm_dtime\fP Moment du dernier appel système \fBshmdt\fP(2) qui a détaché ce segment. .TP \fIshm_ctime\fP Moment de création du segment ou de la dernière opération \fBIPC_SET\fP de \fBshmctl\fP(). .TP \fIshm_cpid\fP PID du processus ayant créé le segment de mémoire partagée. .TP \fIshm_lpid\fP Identifiant du dernier processus qui a exécuté un appel système \fBshmat\fP(2) ou \fBshmdt\fP(2) sur ce segment. .TP \fIshm_nattch\fP Nombre de processus qui ont ce segment attaché. .PP 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)\ : .PP .in +4n .EX struct ipc_perm { key_t __key; /* Clé fournie à msgget(2) */ uid_t \fBuid\fP; /* UID effectif du propriétaire */ gid_t \fBgid\fP; /* GID effectif du propriétaire */ uid_t cuid; /* UID effectif du créateur */ gid_t cgid; /* GID effectif du créateur */ unsigned short \fBmode\fP; /* \fBPermissions\fP + attributs SHM_DEST et SHM_LOCKED */ unsigned short __seq; /* Numéro de séquence */ }; .EE .in .PP 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 .PP Les bits 0100, 0010 et 0001 (bits d'exécution) ne sont pas utilisés par le système (il n'est pas nécessaire d'avoir les droits d'exécution sur un segment pour effectuer un appel \fBshmat\fP(2) avec le drapeau \fBSHM_EXEC\fP). .PP Les valeurs autorisées pour \fIcmd\fP sont\ : .TP \fBIPC_STAT\fP Copier dans la structure \fIshmid_ds\fP pointée par \fIbuf\fP la structure de données du noyau concernant \fIshmid\fP. Le processus appelant doit avoir des privilèges de lecture sur le segment de mémoire partagée. .TP \fBIPC_SET\fP Écrire les valeurs de certains membres de la structure \fIshmid_ds\fP vers laquelle pointe \fIbuf\fP dans la structure de données du noyau associée à ce segment de mémoire partagée, ce qui met aussi à jour son membre \fIshm_ctime\fP. .IP Les champs suivants sont mis à jour\ : \fIshm_perm.uid\fP, \fIshm_perm.gid\fP et (les 9\ bits les moins significatifs de) \fIshm_perm.mode\fP. .IP L'UID effectif du processus appelant doit correspondre au propriétaire (\fIshm_perm.uid\fP) ou au créateur (\fIshm_perm.cuid\fP) du segment de mémoire partagée, ou bien l'appelant doit être privilégié. .TP \fBIPC_RMID\fP Marquer un segment comme prêt pour la destruction. Il sera détruit effectivement après son dernier détachement (quand le membre \fIshm_nattch\fP de la structure \fIshmid_ds\fP associée vaudra zéro). L'appelant doit être le créateur ou le propriétaire du segment, ou le superutilisateur. Le paramètre \fIbuf\fP est ignoré. .IP Si un segment est marqué pour destruction, le drapeau (non standard) \fBSHM_DEST\fP, dans le champ \fIshm_perm.mode\fP de la structure de données associée récupérée par \fBIPC_STAT\fP, sera défini. .IP L'appelant \fIdoit\fP s'assurer que le segment sera bien détruit. Autrement, les pages qui ont été allouées resteront indéfiniment en mémoire ou en swap. .IP Consultez la description de \fI/proc/sys/kernel/shm_rmid_forced\fP dans \fBproc\fP(5). .TP \fBIPC_INFO\fP (spécifique à Linux) Fournir des informations sur les limites et paramètres du système concernant la mémoire partagée dans la structure pointée par \fIbuf\fP. Cette structure est de type \fIshminfo\fP (ce qui nécessite un transtypage), qui est défini dans \fI\fP si la macro \fB_GNU_SOURCE\fP est définie\ : .IP .in +4n .EX struct shminfo { unsigned long shmmax; /* Taille maximale de segment */ unsigned long shmmin; /* Taille minimale de segment\ ; toujours 1 */ unsigned long shmmni; /* Nombre maximal de segments */ unsigned long shmseg; /* Nombre maximal de segments qu'un processus peut attacher\ ; pas utilisé par le noyau */ unsigned long shmall; /* Nombre maximal de pages de mémoire partagée sur le système */ }; .EE .in .IP Les paramètres \fIshmmni\fP, \fIshmmax\fP et \fIshmall\fP peuvent être modifiés via les fichiers du même nom dans \fI/proc\fP. Consultez \fBproc\fP(5) pour plus de détails. .TP \fBSHM_INFO\fP (spécifique à Linux) Fournir une structure \fIshm_info\fP contenant des informations sur les ressources système utilisées par des segments de mémoire partagée. Cette structure est définie dans \fI\fP si la macro \fB_GNU_SOURCE\fP est définie\ : .IP .in +4n .EX struct shm_info { int used_ids; /* Nombre de segments actuellement existants */ unsigned long shm_tot; /* Nombre total de pages de mémoire partagée */ unsigned long shm_rss; /* Nombre de pages de mémoire partagée actuellement en RAM */ unsigned long shm_swp; /* Nombre de pages de mémoire partagée actuellement en swap */ unsigned long swap_attempts; /* Non utilisé depuis Linux 2.4 */ unsigned long swap_successes; /* Non utilisé depuis Linux 2.4 */ }; .EE .in .TP \fBSHM_STAT\fP (spécifique à Linux) Renvoyer une structure \fIshmid_ds\fP comme pour \fBIPC_STAT\fP. Cependant, l'argument \fIshmid\fP n'est pas l'identifiant d'un segment, mais un indice dans la table interne du noyau qui contient les informations sur tous les segments de mémoire partagée du système. .TP \fBSHM_STAT_ANY\fP (spécifique à Linux, depuis Linux\ 4.17) Renvoyer une structure \fIshmid_ds\fP suite à un \fBSHM_STAT\fP. Néanmoins, il n'y a pas de vérification de droit d'accès en lecture \fIshm_perm.mode\fP sur \fIshmid\fP, ce qui signifie que n'importe quel utilisateur peut utiliser cette opération (tout comme n'importe quel utilisateur peut lire \fI/proc/sysvipc/shm\fP pour obtenir les mêmes informations). .PP L'appelant peut empêcher ou autoriser le noyau à évincer un segment de mémoire partagée en swap avec les valeurs suivantes de \fIcmd\fP\ : .TP \fBSHM_LOCK\fP (spécifique à Linux) Empêcher le segment d'être évincé en swap. L'appelant doit consulter chaque page concernée après avoir effectué le verrouillage pour s'assurer qu'elle est bien présente en mémoire. Si un segment est verrouillé, le drapeau (non standard) \fBSHM_LOCKED\fP sera levé dans le champ \fIshm_perm.mode\fP de la structure de données, récupérée avec \fBIPC_STAT\fP, associée au segment. .TP \fBSHM_UNLOCK\fP (spécifique à Linux) Déverrouiller le segment, ce qui autorise son swapping. .PP .\" There was some weirdness in Linux 2.6.9: SHM_LOCK and SHM_UNLOCK could .\" be applied to a segment, regardless of ownership of the segment. .\" This was a botch-up in the move to RLIMIT_MEMLOCK, and was fixed .\" in Linux 2.6.10. MTK, May 2005 Avant Linux\ 2.6.10, seul un processus privilégié pouvait utiliser \fBSHM_LOCK\fP et \fBSHM_UNLOCK\fP. Depuis Linux\ 2.6.10, un processus non privilégié peut utiliser ces opérations si son UID effectif est celui du propriétaire ou du créateur du segment, et (pour \fBSHM_LOCK\fP) la quantité de mémoire à verrouiller ne dépasse pas la limite de ressource \fBRLIMIT_MEMLOCK\fP (consultez \fBsetrlimit\fP(2)). .SH "VALEUR RENVOYÉE" Une opération \fBIPC_INFO\fP ou \fBSHM_INFO\fP réussie renvoie l'index de la plus grande entrée utilisée dans le tableau interne du noyau contenant les informations sur tous les segments de mémoire partagée (cette information peut être utilisée par des opérations \fBSHM_STAT\fP répétées pour obtenir les informations sur tous les segments de mémoire partagée du système). Une opération \fBSHM_STAT\fP réussie renvoie l'identifiant du segment de mémoire partagée dont l'indice était fourni par \fIshmid\fP. Les autres opérations renvoient \fB0\fP si elles réussissent. .PP En cas d'erreur, la valeur de retour est \fB\-1\fP et \fIerrno\fP est définie pour préciser l'erreur. .SH ERREURS .TP \fBEACCES\fP L'opération demandée est \fBIPC_STAT\fP ou \fBSHM_STAT\fP, mais \fIshm_perm.mode\fP ne permet pas la lecture du segment \fIshmid\fP, et le processus appelant n'a pas la capacité \fBCAP_IPC_OWNER\fP dans l'espace de noms utilisateur qui gère son espace de noms IPC. .TP \fBEFAULT\fP \fIcmd\fP a la valeur \fBIPC_SET\fP ou \fBIPC_STAT\fP mais \fIbuf\fP pointe en dehors de l'espace d'adressage accessible. .TP \fBEIDRM\fP \fIshmid\fP pointe sur un segment détruit. .TP \fBEINVAL\fP \fIshmid\fP n'est pas un identifiant correct, ou \fIcmd\fP n'est pas une commande reconnue. Ou bien, pour l'opération \fBSHM_STAT\fP ou \fBSHM_STAT_ANY\fP, l'indice indiqué dans \fIshmid\fP correspond à un élément actuellement inutilisé de la table. .TP \fBENOMEM\fP (Depuis Linux\ 2.6.9) L'opération \fBSHM_LOCK\fP a été demandée et la taille du segment à verrouiller entraînerait un dépassement de la limite du nombre total d'octets de mémoire partagée verrouillés pour l'UID réel du processus appelant. Cette limite est la limite souple de ressource \fBRLIMIT_MEMLOCK\fP (consultez \fBsetrlimit\fP(2)). .TP \fBEOVERFLOW\fP L'opération demandée est \fBIPC_STAT\fP mais la valeur de GID ou d'UID est trop grande pour être stockée dans la structure pointée par \fIbuf\fP. .TP \fBEPERM\fP On réclame \fBIPC_SET\fP ou \fBIPC_RMID\fP mais l'appelant n'est ni le créateur du segment (trouvé dans \fIshm_perm.cuid\fP), ni le propriétaire (trouvé dans \fIshm_perm.uid\fP) et le processus n'est pas privilégié (sous Linux\ : n'a pas la capacité \fBCAP_SYS_ADMIN\fP). .IP Ou bien (avant Linux\ 2.6.9) soit \fBSHM_LOCK\fP, soit \fBSHM_UNLOCK\fP a été spécifié, mais le processus n'est pas privilégié (sous Linux\ : n'a pas la capacité \fBCAP_IPC_LOCK\fP. Depuis Linux\ 2.6.9, cette erreur peut également se produire si la limite \fBRLIMIT_MEMLOCK\fP est 0 et si l'appelant n'est pas privilégié. .SH STANDARDS .\" SVr4 documents additional error conditions EINVAL, .\" ENOENT, ENOSPC, ENOMEM, EEXIST. Neither SVr4 nor SVID documents .\" an EIDRM error condition. POSIX.1\-2001, POSIX.1\-2008, SVr4. .SH NOTES Les opérations \fBIPC_INFO\fP, \fBSHM_STAT\fP et \fBSHM_INFO\fP sont utilisées par le programme \fBipcs\fP(1) pour fournir des informations sur les ressources allouées. Elles peuvent être déplacées ou modifiées par la suite vers le système de fichiers \fI/proc\fP. .PP Linux autorise un processus à attacher (\fBshmat\fP(2)) un segment de mémoire partagée ayant été marqué pour suppression avec \fIshmctl(IPC_RMID)\fP. Cette particularité n'est pas disponible sur d'autres variantes d'UNIX\ ; des applications portables ne devraient pas compter sur ce comportement. .PP Divers champs de la structure \fIshmid_ds\fP étaient de type \fIshort\fP sous Linux\ 2.2 et sont devenus des \fIlong\fP 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 \fBIPC_64\fP dans \fIcmd\fP.) .SH "VOIR AUSSI" \fBmlock\fP(2), \fBsetrlimit\fP(2), \fBshmget\fP(2), \fBshmop\fP(2), \fBcapabilities\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 et Jean-Philippe MENGUAL . .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 .