table of contents
other sections
SHMCTL(2) | Manuel du programmeur Linux | SHMCTL(2) |
NOM¶
shmctl - Contrôler la mémoire partagéeSYNOPSIS¶
#include <sys/ipc.h>DESCRIPTION¶
shmctl() effectue l'opération de contrôle indiquée par cmd sur le segment de mémoire partagée identifié par shmid. L'argument buf est un pointeur sur une structure shmid_ds, définie dans <sys/shm.h> comme suit :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 */ ... };
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 à msgget(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 + attributs SHM_DEST et SHM_LOCKED */ unsigned short __seq; /* Numéro de séquence */ };
Les valeurs autorisées pour cmd sont :
- IPC_STAT
- Copier dans la structure shmid_ds pointée par buf la structure de données du noyau concernant shmid. Le processus appelant doit avoir des privilèges de lecture sur le jeu de sémaphores
- IPC_SET
- Écrire la valeur de certains champs de la structure shmid_ds pointée par buf dans la structure du noyau représentant ce segment de mémoire partagée, en mettant à jour le champ shm_ctime. Les champs suivants peuvent être mis à jour : shm_perm.uid, shm_perm.gid et les 9 bits de poids faible de shm_perm.mode. L'UID effectif du processus appelant doit être soit celui du propriétaire ( shm_perm.uid) soit celui du créateur ( shm_perm.cuid) du segment partagé, ou bien l'appelant doit être privilégié.
- IPC_RMID
- Marquer un segment comme prêt pour la destruction. Il sera détruit effectivement après le dernier détachement (quand le membre shm_nattch de la structure shmid_ds associée vaudra zéro). L'appelant doit être le créateur du segment, son propriétaire, ou le superutilisateur. Si un segment est marqué pour destruction, le drapeau (non standard) SHM_DEST sera levé dans le champ shm_perm.mode de la structure de données associée récupérée par IPC_STAT.
- IPC_INFO (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 buf. Cette structure est de type shminfo
(ce qui nécessite un transtypage), qui est défini dans
<sys/shm.h> si la macro _GNU_SOURCE est
définie :
Les paramètres shmmni, shmmax et shmall peuvent être modifiés via les fichiers du même nom dans /proc. Consultez proc(5) pour plus de détails.
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 */ };
- SHM_INFO (spécifique à Linux)
- Fournir une structure shm_info contenant des
informations sur les ressources système utilisées par des
segments de mémoire partagée. Cette structure est définie
dans <sys/shm.h> si la macro _GNU_SOURCE est
définie :
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 */ };
- SHM_STAT (spécifique à Linux)
- Renvoie une structure shmid_ds comme pour IPC_STAT. Cependant, l'argument shmid 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.
- SHM_LOCK (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) SHM_LOCKED sera levé dans le champ shm_perm.mode de la structure de données, récupérée avec IPC_STAT, associée au segment.
- SHM_UNLOCK (spécifique à Linux)
- Déverrouiller le segment, ce qui autorise son swapping.
VALEUR RENVOYÉE¶
Une opération IPC_INFO ou SHM_INFO 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 SHM_STAT répétées pour obtenir les informations sur tous les segments de mémoire partagée du système. Une opération SHM_STAT réussie renvoie l'identifiant du segment de mémoire partagée dont l'indice était fourni par shmid. Les autres opérations renvoient 0 si elles réussissent.ERREURS¶
- EACCES
- L'opération demandée est IPC_STAT ou SHM_STAT, mais shm_perm.mode ne permet pas la lecture du segment shmid, et le processus appelant n'a pas la capacité CAP_IPC_OWNER.
- EFAULT
- cmd a la valeur IPC_SET ou IPC_STAT mais buf pointe en dehors de l'espace d'adressage accessible.
- EIDRM
- shmid pointe sur un segment détruit.
- EINVAL
- shmid n'est pas un identifiant correct, ou cmd n'est pas une commande reconnue. Ou bien, pour l'opération SHM_STAT, l'indice indiqué dans shmid correspond à un élément actuellement inutilisé de la table.
- ENOMEM
- (Depuis le noyau 2.6.9) L'opération SHM_LOCK 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 RLIMIT_MEMLOCK (consultez setrlimit(2)).
- EOVERFLOW
- L'opération demandée est IPC_STAT mais la valeur de GID ou d'UID est trop grande pour être stockée dans la structure pointée par buf.
- EPERM
- On réclame IPC_SET ou IPC_RMID mais
l'appelant n'est ni le créateur du segment (trouvé dans
shm_perm.cuid), ni le propriétaire (trouvé dans
shm_perm.uid) et le processus n'est pas privilégié (sous
Linux : n'a pas la capacité CAP_SYS_ADMIN.
CONFORMITɶ
SVr4, POSIX.1-2001.NOTES¶
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.VOIR AUSSI¶
mlock(2), setrlimit(2), shmget(2), shmop(2), capabilities(7), svipc(7)COLOPHON¶
Cette page fait partie de la publication 3.44 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/>.TRADUCTION¶
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> ».31 mai 2012 | Linux |