.\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993 .\" and Copyright 1993 Giorgio Ciucci .\" and Copyright 2004, 2005 Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" 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 kernel 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. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SHMCTL 2 "7 février 2014" Linux "Manuel du programmeur Linux" .SH NOM shmctl \- Contrôler la mémoire partagée System\ V .SH SYNOPSIS .ad l \fB#include \fP .br \fB#include \fP .sp \fBint shmctl(int \fP\fIshmid\fP\fB, int \fP\fIcmd\fP\fB, struct shmid_ds *\fP\fIbuf\fP\fB);\fP .ad b .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 .nf struct shmid_ds { struct ipc_perm shm_perm; /* Propriétaire et permissions */ size_t shm_segsz; /* Taille segment en octets */ time_t shm_atime; /* Heure dernier attachement */ time_t shm_dtime; /* Heure dernier détachement */ time_t shm_ctime; /* Heure dernier changement */ pid_t shm_cpid; /* PID du créateur */ pid_t shm_lpid; /* PID du dernier shmat(2) / shmdt(2) */ shmatt_t shm_nattch; /* Nombre d'attachements actuels */ ... }; .fi .in .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 .nf 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 */ }; .fi .in .PP Les valeurs autorisées pour \fIcmd\fP sont\ : .br .TP 10 \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 jeu de sémaphores .TP \fBIPC_SET\fP Écrire la valeur de certains champs de la structure \fIshmid_ds\fP pointée par \fIbuf\fP dans la structure du noyau représentant ce segment de mémoire partagée, en mettant à jour le champ \fIshm_ctime\fP. Les champs suivants peuvent être mis à jour\ : \fIshm_perm.uid\fP, \fIshm_perm.gid\fP et les 9\ bits de poids faible de \fIshm_perm.mode\fP. L'UID effectif du processus appelant doit être soit celui du propriétaire (\fIshm_perm.uid\fP) soit celui du créateur (\fIshm_perm.cuid\fP) du segment partagé, 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 le 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 sera levé dans le champ \fIshm_perm.mode\fP de la structure de données associée récupérée par \fBIPC_STAT\fP. .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 10 \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\ : .nf .in +4n struct shminfo { unsigned long shmmax; /* Taille maximum de segment */ unsigned long shmmin; /* Taille minimum 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 */ }; .in .fi 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\ : .nf .in +4n 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 */ }; .in .fi .TP \fBSHM_STAT\fP (spécifique à Linux) Renvoie 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. .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\ : .br .TP 10 \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 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 2.6.10. MTK, May 2005 Dans les noyaux antérieurs à 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 0 si elles réussissent. En cas d'erreur, la valeur de retour est \-1, et \fIerrno\fP contient le code d'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. .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, l'indice indiqué dans \fIshmid\fP correspond à un élément actuellement inutilisé de la table. .TP \fBENOMEM\fP (Depuis le noyau 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. Ou bien (pour les noyaux antérieurs à 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 l'appelant n'est pas privilégié. .SH CONFORMITÉ .\" SVr4 documents additional error conditions EINVAL, .\" ENOENT, ENOSPC, ENOMEM, EEXIST. Neither SVr4 nor SVID documents .\" an EIDRM error condition. SVr4, POSIX.1\-2001. .SH NOTES .\" Like Linux, the FreeBSD man pages still document .\" the inclusion of these header files. L'inclusion de \fI\fP et \fI\fP 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 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. Ceci peut changer dans le futur, en utilisant une interface sur le système de fichiers \fI/proc\fP. 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. 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 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), \fBsvipc\fP(7) .SH COLOPHON Cette page fait partie de la publication 3.65 du projet \fIman\-pages\fP 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/. .SH TRADUCTION Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a par l'équipe de traduction francophone au sein du projet perkamon . .PP Christophe Blaess (1996-2003), Alain Portal (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian\ (2006-2009). .PP Veuillez signaler toute erreur de traduction en écrivant à ou par un rapport de bogue sur le paquet \fBmanpages\-fr\fR. .PP Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande «\ \fBman\ \-L C\fR \fI
\fR\ \fI\fR\ ».