shmctl(2) System Calls Manual shmctl(2) NOM shmctl - Controler la memoire partagee System V BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int shmctl(int shmid, int op, struct shmid_ds *buf); DESCRIPTION shmctl() effectue l'operation de controle indiquee par op sur le segment de memoire partagee System V identifie par shmid. L'argument buf est un pointeur sur une structure shmid_ds, definie dans comme suit : 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 */ ... }; Les champs de la structure shmid_ds sont les suivants : shm_perm Il s'agit d'une structure ipc_perm (voir ci-dessous) qui indique les droits d'acces aux segments de la memoire partagee. shm_segsz Taille en octets du segment de memoire partagee. shm_atime Moment du dernier appel systeme shmat(2) qui a attache ce segment. shm_dtime Moment du dernier appel systeme shmdt(2) qui a detache ce segment. shm_ctime Moment de creation du segment ou de la derniere operation IPC_SET de shmctl(). shm_cpid PID du processus ayant cree le segment de memoire partagee. shm_lpid Identifiant du dernier processus qui a execute un appel systeme shmat(2) ou shmdt(2) sur ce segment. shm_nattch Nombre de processus qui ont ce segment attache. La structure ipc_perm est definie de la facon suivante (les champs en gras peuvent etre modifies en utilisant IPC_SET) : struct ipc_perm { key_t __key; /* Key supplied to shmget(2) */ uid_t uid; /* Effective UID of owner */ gid_t gid; /* Effective GID of owner */ uid_t cuid; /* Effective UID of creator */ gid_t cgid; /* Effective GID of creator */ unsigned short mode; /* Permissions + SHM_DEST and SHM_LOCKED flags */ unsigned short __seq; /* Sequence number */ }; Les 9 bits les moins significatifs du champ mode de la structure ipc_perm definissent les droits d'acces aux segments de la memoire partagee. Les bits de permission sont les suivants : 0400 Lisible par l'utilisateur 0200 Droit d'ecriture pour l'utilisateur 0040 Lisible par le groupe 0020 Autorisation d'ecriture pour le groupe 0004 Lisible par les autres 0002 Ecrit par d'autres Les bits 0100, 0010 et 0001 (bits d'execution) ne sont pas utilises par le systeme (il n'est pas necessaire d'avoir les droits d'execution sur un segment pour effectuer un appel shmat(2) avec le drapeau SHM_EXEC). Les valeurs autorisees pour op 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 segment de memoire partagee. IPC_SET Ecrire les valeurs de certains membres de la structure shmid_ds vers laquelle pointe buf dans la structure de donnees du noyau associee a ce segment de memoire partagee, ce qui met aussi a jour son membre shm_ctime. The following fields are updated: shm_perm.uid, shm_perm.gid, and (the least significant 9 bits of) shm_perm.mode. L'UID effectif du processus appelant doit correspondre au proprietaire (shm_perm.uid) ou au createur (shm_perm.cuid) du segment de memoire partagee, ou bien l'appelant doit etre privilegie. IPC_RMID Marquer un segment comme pret pour la destruction. Il sera detruit effectivement apres son dernier detachement (quand le membre shm_nattch de la structure shmid_ds associee vaudra zero). L'appelant doit etre le createur ou le proprietaire du segment, ou le superutilisateur. Le parametre buf est ignore. Si un segment est marque pour destruction, le drapeau (non standard) SHM_DEST, dans le champ shm_perm.mode de la structure de donnees associee recuperee par IPC_STAT, sera defini. 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. Consultez la description de /proc/sys/kernel/shm_rmid_forced dans proc(5). 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 si la macro _GNU_SOURCE est definie : 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 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 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) Renvoyer 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. SHM_STAT_ANY (specifique a Linux, depuis Linux 4.17) Renvoyer une structure shmid_ds suite a un SHM_STAT. Neanmoins, il n'y a pas de verification de droit d'acces en lecture shm_perm.mode sur shmid, ce qui signifie que n'importe quel utilisateur peut utiliser cette operation (tout comme n'importe quel utilisateur peut lire /proc/sysvipc/shm pour obtenir les memes informations). L'appelant peut empecher ou autoriser le noyau a evincer un segment de memoire partagee en swap avec les valeurs suivantes de op : 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. Avant Linux 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 RENVOYEE 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 est definie pour preciser l'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 dans l'espace de noms utilisateur qui gere son espace de noms IPC. EFAULT op 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 op n'est pas une commande reconnue. Ou bien, pour l'operation SHM_STAT ou SHM_STAT_ANY, l'indice indique dans shmid correspond a un element actuellement inutilise de la table. ENOMEM (Depuis Linux 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 (avant Linux 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 si l'appelant n'est pas privilegie. VERSIONS 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. NORMES POSIX.1-2024. HISTORIQUE POSIX.1-2001, SVr4. Various fields in a struct shmid_ds were typed as short under Linux 2.2 and have become long 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 IPC_64 flag in op.) 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. Elles peuvent etre deplacees ou modifiees par la suite vers le systeme de fichiers /proc. VOIR AUSSI mlock(2), setrlimit(2), shmget(2), shmop(2), capabilities(7), sysvipc(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.18 8 fevrier 2026 shmctl(2)