.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993, Luigi P. Bai .\" 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 shmctl 2 "8 février 2026" "Pages du manuel de Linux 6.18" .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 .P \fBint shmctl(int \fP\fIshmid\fP\fB, int \fP\fIop\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 \fIop\fP sur le segment de mémoire partagée System V identifié par \fIshmid\fP. .P L'argument \fIbuf\fP est un pointeur sur une structure \fIshmid_ds\fP, définie dans \fI\fP comme suit\ : .P .in +4n .EX struct shmid_ds { struct ipc_perm shm_perm; /* Ownership and permissions */ size_t shm_segsz; /* Size of segment (bytes) */ time_t shm_atime; /* Last attach time */ time_t shm_dtime; /* Last detach time */ time_t shm_ctime; /* Creation time/time of last modification via shmctl() */ pid_t shm_cpid; /* PID of creator */ pid_t shm_lpid; /* PID of last shmat(2)/shmdt(2) */ shmatt_t shm_nattch; /* # of current attaches */ ... }; .EE .in .P 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é. .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 shmget(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; /* \f[B]Permissions\fR + SHM_DEST and SHM_LOCKED flags */ 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 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). .P Les valeurs autorisées pour \fIop\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 The following fields are updated: \fIshm_perm.uid\fP, \fIshm_perm.gid\fP, and (the least significant 9 bits of) \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). .P L'appelant peut empêcher ou autoriser le noyau à évincer un segment de mémoire partagée en swap avec les valeurs suivantes de \fIop\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. .P .\" 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. .P 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 \fIop\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 \fIop\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 VERSIONS 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. .SH NORMES POSIX.1\-2024. .SH HISTORIQUE .\" SVr4 documents additional error conditions EINVAL, .\" ENOENT, ENOSPC, ENOMEM, EEXIST. Neither SVr4 nor SVID documents .\" an EIDRM error condition. POSIX.1\-2001, SVr4. .P Various fields in a \fIstruct\ shmid_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.) .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. .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 .