shmctl(2) | System Calls Manual | shmctl(2) |
shmctl - Contrôler la mémoire partagée System V
Bibliothèque C standard (libc, -lc)
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
shmctl() effectue l'opération de contrôle indiquée par cmd sur le segment de mémoire partagée System V 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; /* Appartenance et droits */
size_t shm_segsz; /* Taille du segment (octets) */
time_t shm_atime; /* Dernier moment de rattachement */
time_t shm_dtime; /* Dernier moment de détachement */
time_t shm_ctime; /* Moment de la création ou de la dernière
modification avec shmctl() */
pid_t shm_cpid; /* PID du créateur */
pid_t shm_lpid; /* PID du dernier shmat(2)/shmdt(2) */
shmatt_t shm_nattch; /* N. des attaches actuelles */
... };
Les champs de la structure shmid_ds sont les suivants :
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 9 bits les moins significatifs du champ mode de la structure ipc_perm définissent les droits d'accès aux segments de la mémoire partagée. Les bits de permission sont les suivants :
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 |
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 shmat(2) avec le drapeau SHM_EXEC).
Les valeurs autorisées pour cmd sont :
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 */ };
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 */ };
L'appelant peut empêcher ou autoriser le noyau à évincer un segment de mémoire partagée en swap avec les valeurs suivantes de cmd :
Avant Linux 2.6.10, seul un processus privilégié pouvait utiliser SHM_LOCK et SHM_UNLOCK. 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 SHM_LOCK) la quantité de mémoire à verrouiller ne dépasse pas la limite de ressource RLIMIT_MEMLOCK (consultez setrlimit(2)).
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.
En cas d'erreur, la valeur de retour est -1 et errno est définie pour préciser l'erreur.
POSIX.1-2001, POSIX.1-2008, SVr4.
Les opérations IPC_INFO, SHM_STAT et SHM_INFO sont utilisées par le programme ipcs(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 /proc.
Linux autorise un processus à attacher (shmat(2)) un segment de mémoire partagée ayant été marqué pour suppression avec shmctl(IPC_RMID). 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 shmid_ds étaient de type short sous Linux 2.2 et sont devenus des long sous Linux 2.4. Pour en tirer parti, une recompilation sous la glibc 2.1.91 ou ultérieure doit suffire. (Le noyau distingue les anciens et nouveaux appels par un drapeau IPC_64 dans cmd.)
mlock(2), setrlimit(2), shmget(2), shmop(2), capabilities(7), sysvipc(7)
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
15 décembre 2022 | Pages du manuel de Linux 6.03 |