Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
shmctl - Controler la memoire partagee
SYNOPSIS
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
DESCRIPTION
shmctl() effectue l'operation de controle indiquee par cmd sur le
segment de memoire partagee identifie par shmid.
L'argument buf est un pointeur sur une structure shmid_ds, definie dans
<sys/shm.h> comme suit :
struct shmid_ds {
struct ipc_perm shm_perm; /* Proprietaire et permissions */
size_t shm_segsz; /* Taille segment en octets */
time_t shm_atime; /* Heure dernier attachement */
time_t shm_dtime; /* Heure dernier detachement */
time_t shm_ctime; /* Heure dernier changement */
pid_t shm_cpid; /* PID du createur */
pid_t shm_lpid; /* PID du dernier shmat(2) /
shmdt(2) */
shmatt_t shm_nattch; /* Nombre d'attachements actuels */
...
};
La structure ipc_perm est definie dans <sys/ipc.h> de la facon suivante
(les champs en gras peuvent etre modifies en utilisant IPC_SET) :
struct ipc_perm {
key_t __key; /* Cle fournie a msgget(2) */
uid_t uid; /* UID effectif du proprietaire */
gid_t gid; /* GID effectif du proprietaire */
uid_t cuid; /* UID effectif du createur */
gid_t cgid; /* GID effectif du createur */
unsigned short mode; /* Permissions + attributs
SHM_DEST et SHM_LOCKED */
unsigned short __seq; /* Numero de sequence */
};
Les valeurs autorisees pour cmd sont :
IPC_STAT Copier dans la structure shmid_ds pointee par buf la
structure de donnees du noyau concernant shmid. Le processus
appelant doit avoir des privileges de lecture sur le jeu de
semaphores
IPC_SET Ecrire la valeur de certains champs de la structure shmid_ds
pointee par buf dans la structure du noyau representant ce
segment de memoire partagee, en mettant a jour le champ
shm_ctime. Les champs suivants peuvent etre mis a 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 etre
soit celui du proprietaire (shm_perm.uid) soit celui du
createur (shm_perm.cuid) du segment partage, ou bien
l'appelant doit etre privilegie.
IPC_RMID Marquer un segment comme pret pour la destruction. Il sera
detruit effectivement apres le dernier detachement (quand le
membre shm_nattch de la structure shmid_ds associee vaudra
zero). L'appelant doit etre le createur du segment, son
proprietaire, ou le superutilisateur. Si un segment est
marque pour destruction, le drapeau (non standard) SHM_DEST
sera leve dans le champ shm_perm.mode de la structure de
donnees associee recuperee par IPC_STAT.
L'appelant doit s'assurer que le segment sera bien detruit. Autrement,
les pages qui ont ete allouees resteront indefiniment en memoire ou en
swap.
IPC_INFO (specifique a Linux)
Fournir des informations sur les limites et parametres du
systeme concernant la memoire partagee dans la structure
pointee par buf. Cette structure est de type shminfo (ce qui
necessite un transtypage), qui est defini dans <sys/shm.h> si
la macro _GNU_SOURCE est definie :
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 utilise par le noyau */
unsigned long shmall; /* Nombre maximal de pages de
memoire partagee sur le
systeme */
};
Les parametres shmmni, shmmax et shmall peuvent etre modifies
via les fichiers du meme nom dans /proc. Consultez proc(5)
pour plus de details.
SHM_INFO (specifique a Linux)
Fournir une structure shm_info contenant des informations sur
les ressources systeme utilisees par des segments de memoire
partagee. Cette structure est definie dans <sys/shm.h> si la
macro _GNU_SOURCE est definie :
struct shm_info {
int used_ids; /* Nombre de segments
actuellement existants */
unsigned long shm_tot; /* Nombre total de pages de
memoire partagee */
unsigned long shm_rss; /* Nombre de pages de memoire
partagee actuellement en RAM */
unsigned long shm_swp; /* Nombre de pages de memoire
partagee actuellement en swap */
unsigned long swap_attempts;
/* Non utilise depuis Linux 2.4 */
unsigned long swap_successes;
/* Non utilise depuis Linux 2.4 */
};
SHM_STAT (specifique a 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 memoire
partagee du systeme.
L'appelant peut empecher ou autoriser le noyau a evincer un segment de
memoire partagee en swap avec les valeurs suivantes de cmd :
SHM_LOCK (specifique a Linux)
Empecher le segment d'etre evince en swap. L'appelant doit
consulter chaque page concernee apres avoir effectue le
verrouillage pour s'assurer qu'elle est bien presente en
memoire. Si un segment est verrouille, le drapeau (non
standard) SHM_LOCKED sera leve dans le champ shm_perm.mode de
la structure de donnees, recuperee avec IPC_STAT, associee au
segment.
SHM_UNLOCK (specifique a Linux)
Deverrouiller le segment, ce qui autorise son swapping.
Dans les noyaux anterieurs a 2.6.10, seul un processus privilegie
pouvait utiliser SHM_LOCK et SHM_UNLOCK. Depuis Linux 2.6.10, un
processus non privilegie peut utiliser ces operations si son UID
effectif est celui du proprietaire ou du createur du segment, et (pour
SHM_LOCK) la quantite de memoire a verrouiller ne depasse pas la limite
de ressource RLIMIT_MEMLOCK (consultez setrlimit(2)).
VALEUR RENVOY'EE
Une operation IPC_INFO ou SHM_INFO reussie renvoie l'index de la plus
grande entree utilisee dans le tableau interne du noyau contenant les
informations sur tous les segments de memoire partagee. Cette
information peut etre utilisee par des operations SHM_STAT repetees
pour obtenir les informations sur tous les segments de memoire partagee
du systeme. Une operation SHM_STAT reussie renvoie l'identifiant du
segment de memoire partagee dont l'indice etait fourni par shmid. Les
autres operations renvoient 0 si elles reussissent.
En cas d'erreur, la valeur de retour est -1, et errno contient le code
d'erreur.
ERREURS
EACCES L'operation demandee 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 capacite 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 detruit.
EINVAL shmid n'est pas un identifiant correct, ou cmd n'est pas une
commande reconnue. Ou bien, pour l'operation SHM_STAT, l'indice
indique dans shmid correspond a un element actuellement
inutilise de la table.
ENOMEM (Depuis le noyau 2.6.9) L'operation SHM_LOCK a ete demandee, et
la taille du segment a verrouiller entrainerait un depassement
de la limite du nombre total d'octets de memoire partagee
verrouilles pour l'UID reel du processus appelant. Cette limite
est la limite souple de ressource RLIMIT_MEMLOCK (consultez
setrlimit(2)).
EOVERFLOW
L'operation demandee est IPC_STAT mais la valeur de GID ou d'UID
est trop grande pour etre stockee dans la structure pointee par
buf.
EPERM On reclame IPC_SET ou IPC_RMID mais l'appelant n'est ni le
createur du segment (trouve dans shm_perm.cuid), ni le
proprietaire (trouve dans shm_perm.uid) et le processus n'est
pas privilegie (sous Linux : n'a pas la capacite CAP_SYS_ADMIN.
Ou bien (pour les noyaux anterieurs a 2.6.9) soit SHM_LOCK soit
SHM_UNLOCK a ete specifie, mais le processus n'est pas
privilegie (sous Linux : n'a pas la capacite CAP_IPC_LOCK.
Depuis Linux 2.6.9, cette erreur peut egalement se produire si
la limite RLIMIT_MEMLOCK est 0, et l'appelant n'est pas
privilegie.
CONFORMIT'E
SVr4, POSIX.1-2001.
NOTES
Les operations IPC_INFO, SHM_STAT et SHM_INFO sont utilisees par le
programme ipcs(1) pour fournir des informations sur les ressources
allouees. Ceci peut changer dans le futur, en utilisant une interface
sur le systeme de fichiers /proc.
Linux autorise un processus a attacher (shmat(2)) un segment de memoire
partagee ayant ete marque pour suppression (avec shmctl(IPC_RMID).
Cette particularite 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 shmid_ds etaient de type short sous Linux
2.2 et sont devenus des long sous Linux 2.4. Pour en tirer parti, une
recompilation sous glibc 2.1.91 ou ulterieure doit suffire. (Le noyau
distingue les anciens et nouveaux appels par un drapeau IPC_64 dans
cmd.)
VOIR AUSSI
mlock(2), setrlimit(2), shmget(2), shmop(2), capabilities(7), svipc(7)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.
Linux 7 aout 2008 SHMCTL(2)