.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993 .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified Wed Jul 28 10:57:35 1993, Rik Faith .\" Modified Sun Nov 28 16:43:30 1993, Rik Faith .\" with material from Giorgio Ciucci .\" Portions Copyright 1993 Giorgio Ciucci .\" Modified Tue Oct 22 22:03:17 1996 by Eric S. Raymond .\" Modified, 8 Jan 2003, Michael Kerrisk, .\" Removed EIDRM from errors - that can't happen... .\" Modified, 27 May 2004, Michael Kerrisk .\" Added notes on capability requirements .\" Modified, 11 Nov 2004, Michael Kerrisk .\" Language and formatting clean-ups .\" Added notes on /proc files .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH shmget 2 "30 mars 2023" "Pages du manuel de Linux 6.05.01" .SH NOM shmget \- Allouer un segment de mémoire partagée System V .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .PP \fBint shmget(key_t \fP\fIkey\fP\fB, size_t \fP\fIsize\fP\fB, int \fP\fIshmflg\fP\fB);\fP .fi .SH DESCRIPTION \fBshmget\fP() renvoie l'identifiant du segment de mémoire partagée System\ V associé à la valeur de l'argument \fIkey\fP. Il peut être utilisé soit pour obtenir l'identifiant d'un segment de mémoire partagée précédemment créé (quand \fIshmflg\fP vaut zéro et quand \fIkey\fP n'a pas la valeur \fBIPC_PRIVATE\fP), soit pour créer un nouvel ensemble. .PP Un nouveau segment mémoire partagée, de taille \fIsize\fP arrondie au multiple supérieur de \fBPAGE_SIZE\fP, est créé si \fIkey\fP a la valeur \fBIPC_PRIVATE\fP ou si \fIkey\fP n'est pas \fBIPC_PRIVATE\fP, aucun segment de mémoire partagée ne correspondant à \fIkey\fP n'existe, et si \fBIPC_CREAT\fP est indiqué dans \fIshmflg\fP. .PP Si \fIshmflg\fP contient à la fois les attributs \fBIPC_CREAT\fP et \fBIPC_EXCL\fP, et si un segment de mémoire partagée est déjà associé à \fIkey\fP, \fBshmget\fP() échoue avec le code d'erreur \fBEEXIST\fP. Cela est similaire au comportement de \fBopen\fP(2) avec la combinaison \fBO_CREAT | O_EXCL\fP. .PP \fIshmflg\fP est composé de\ : .TP \fBIPC_CREAT\fP Créer un nouveau segment. Sinon \fBshmget\fP() recherche le segment associé à \fIkey\fP et vérifie que l'appelant a la permission d'y accéder. .TP \fBIPC_EXCL\fP Cet attribut est utilisé avec \fBIPC_CREAT\fP pour garantir que cet appel créé le segment. Si le segment existe déjà, l'appel échoue. .TP \fBSHM_HUGETLB\fP (depuis Linux 2.6) Allouer le segment en utilisant des pages immenses. Consultez le fichier \fIDocumentation/admin\-guide/mm/hugetlbpage.rst\fP dans les sources du noyau Linux pour plus d'informations. .TP \fBSHM_HUGE_2MB\fP, \fBSHM_HUGE_1GB\fP (depuis Linux 3.8) .\" See https://lwn.net/Articles/533499/ Utilisé avec \fBSHM_HUGETLB\fP pour sélectionner des tailles de page hugetlb alternatives (respectivement 2\ Mo et 1\ Go) sur les systèmes qui prennent en charge plusieurs tailles de page hugetlb. .IP Plus généralement, la taille de page immense désirée peut être configurée en encodant le logarithme de base\ 2 de la taille de la page désirée dans les six bits situés à la position \fBSHM_HUGE_SHIFT\fP. Ainsi, les deux constantes ci\-dessus sont définies comme\ : .IP .in +4n .EX #define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT) #define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT) .EE .in .IP Pour plus de détails, consultez le point sur les constantes du même nom dans \fBmmap\fP(2). .TP \fBSHM_NORESERVE\fP (depuis Linux 2.6.15) .\" As at 2.6.17-rc2, this flag has no effect if SHM_HUGETLB was also .\" specified. Cet attribut a le même objet que l'attribut \fBMAP_NORESERVE\fP de \fBmmap\fP(2). Ne pas réserver d'espace de swap pour ce segment. Lorsque de l'espace en swap est réservé, le système garantit qu'il sera possible de modifier le segment. Lorsque l'espace en swap n'est pas réservé, on peut recevoir \fBSIGSEGV\fP lors d'une écriture si la mémoire physique est pleine. Consultez aussi la discussion du fichier \fI/proc/sys/vm/overcommit_memory\fP dans \fBproc\fP(5). .PP En plus des attributs ci\-dessus, les 9\ bits de poids faible de \fIshmflg\fP indiquent les permissions pour le propriétaire, le groupe et les autres. Ces bits ont le même format et la même signification que l'argument \fImode\fP de \fBopen\fP(2). Actuellement la permission d'exécution n'est pas utilisée par le système. .PP Si un nouveau segment de mémoire partagée est créé, le système initialise son contenu à zéro, et la structure \fIshmid_ds\fP (consultez \fBshmctl\fP(2)) est associée au segment comme suit\ : .IP \- 3 \fIshm_perm.cuid\fP et \fIshm_perm.uid\fP contiennent l'UID effectif de l'appelant. .IP \- \fIshm_perm.cgid\fP et \fIshm_perm.gid\fP contiennent le GID effectif de l'appelant. .IP \- Les 9\ bits de poids faible de \fIshm_perm.mode\fP contiennent les 9\ bits de poids faible de \fIshmflg\fP. .IP \- \fIshm_segsz\fP prend la valeur \fIsize\fP. .IP \- \fIshm_lpid\fP, \fIshm_nattch\fP, \fIshm_atime\fP et \fIshm_dtime\fP sont mis à 0. .IP \- \fIshm_ctime\fP contient l'heure actuelle. .PP Si le segment de mémoire existe déjà, les permissions d'accès sont vérifiées, et un contrôle a lieu pour voir s'il est marqué pour destruction. .SH "VALEUR RENVOYÉE" En cas de succès, un identifiant de mémoire partagée valide est renvoyé. En cas d'erreur, \fB\-1\fP est renvoyé et \fIerrno\fP contient le code d'erreur. .SH ERREURS .TP \fBEACCES\fP L'utilisateur n'a pas le droit d'accès au segment de mémoire partagé et il n'a pas la capacité \fBCAP_IPC_OWNER\fP dans l'espace de noms utilisateur qui gère son espace de noms IPC. .TP \fBEEXIST\fP \fBIPC_CREAT\fP et \fBIPC_EXCL\fP étaient indiqués dans \fIshmflg\fP, mais un segment de mémoire partagé associé à \fIkey\fP existe déjà. .TP \fBEINVAL\fP Un nouveau segment devait être créé et \fIsize\fP est inférieur à \fBSHMMIN\fP ou supérieur à \fBSHMMAX\fP. .TP \fBEINVAL\fP Un segment associé à \fIkey\fP existe, mais sa taille est inférieure à \fIsize\fP. .TP \fBENFILE\fP .\" [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp() La limite du nombre total de fichiers ouverts pour le système entier a été atteinte. .TP \fBENOENT\fP Aucun segment n'est associé à \fIkey\fP, et \fBIPC_CREAT\fP n'était pas indiqué. .TP \fBENOMEM\fP Pas assez de mémoire pour allouer le segment. .TP \fBENOSPC\fP Tous les identifiants de mémoire partagée sont utilisés (\fBSHMMNI\fP), ou l'allocation d'un segment partagé de taille \fIsize\fP dépasserait les limites de mémoire partagée du système (\fBSHMALL\fP). .TP \fBEPERM\fP L'attribut \fBSHM_HUGETLB\fP est indiqué, mais l'appelant n'est pas privilégié (ne possède pas la capacité \fBCAP_IPC_LOCK\fP) et il n'est pas membre du groupe \fIsysctl_hugetlb_shm_group\fP\ ; voir la description de \fI/proc/sys/vm/sysctl_hugetlb_shm_group\fP dans \fBproc\fP(5). .SH STANDARDS POSIX.1\-2008. .PP \fBSHM_HUGETLB\fP et \fBSHM_NORESERVE\fP sont spécifiques à Linux. .SH HISTORIQUE .\" SVr4 documents an additional error condition EEXIST. POSIX.1\-2001, SVr4. .SH NOTES .\" \fBIPC_PRIVATE\fP n'est pas une option mais une valeur de type \fIkey_t\fP. Si cette valeur spéciale est utilisée comme clé, l'appel système ignore tout sauf les 9\ bits de poids faible de \fIshmflg\fP et tente de créer un nouveau segment. .SS "Limites de la mémoire partagée" Les limites suivantes influent sur l'appel système \fBshmget\fP\ : .TP \fBSHMALL\fP Limite système du nombre de pages de mémoire partagée, mesurée en unités de taille de page du système. .IP .\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31 Sous Linux, cette limite peut être lue et modifiée grâce au fichier \fI/proc/sys/kernel/shmall\fP. Depuis Linux\ 3.16, la valeur par défaut de cette limite est\ : .IP .in +4n .EX ULONG_MAX \- 2\[ha]24 .EE .in .IP L'effet de cette valeur (qui convient aux systèmes 32 et 64 bits) est de n'imposer aucune limite aux allocations. Cette valeur, utilisée à la place de \fBULONG_MAX\fP, a été choisie par défaut pour empêcher les cas où les applications historiques dépassaient simplement la limite sans vérifier préalablement sa valeur actuelle. De telles applications créeraient un débordement de tampon si la limite était fixée à \fBULONG_MAX\fP. .IP Entre Linux\ 2.2 et Linux\ 3.15, la valeur par défaut de cette limite était\ : .IP .in +4n .EX SHMMAX / PAGE_SIZE * (SHMMNI / 16) .EE .in .IP Si \fBSHMMAX\fP et \fBSHMMNI\fP n'ont pas été modifiés, la multiplication du résultat de cette formule par la taille de la page (pour obtenir une valeur en octets) conduirait à une valeur de 8\ Go comme limite de mémoire totale utilisée par tous les segments de mémoire partagée. .TP \fBSHMMAX\fP Taille maximale en octets d'un segment de mémoire partagée. .IP .\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31 Sous Linux, cette limite peut être lue et modifiée grâce au fichier \fI/proc/sys/kernel/shmmax\fP. Depuis Linux\ 3.16, la valeur par défaut de cette limite est\ : .IP .in +4n .EX ULONG_MAX \- 2\[ha]24 .EE .in .IP L'effet de cette valeur (qui s'applique aux systèmes 32 et 64 bits) est de n'imposer aucune limite d'allocation. Consultez la description de \fBSHMALL\fP sur un point sur la raison pour laquelle cette valeur par défaut est utilisée (au lieu de \fBULONG_MAX\fP). .IP Entre Linux\ 2.2 et Linux\ 3.15, cette limite vaut par défaut 0x2000000 (32\ Mio). .IP Comme il n'est pas possible de projeter une partie d'un segment de mémoire partagé, la quantité de mémoire virtuelle pose une autre limite à la taille maximum d'élévation d'un segment utilisable\ : par exemple, sur i389, les plus grands segments qui peuvent être projetés ont une taille d'environ 2.8\ Go, contre environ 127\ To sur un x89\-64. .TP \fBSHMMIN\fP Taille minimale, en octets, d'un segment partagé\ : dépend de l'implémentation (actuellement 1\ octet, bien que \fBPAGE_SIZE\fP soit la valeur effectivement utilisée). .TP \fBSHMMNI\fP Limite système du nombre de segments de mémoire partagée. Avec Linux\ 2.2, cette limite valait 128 par défaut. Depuis Linux\ 2.4, cette valeur par défaut vaut 4096. .IP .\" Kernels between Linux 2.4.x and Linux 2.6.8 had an off-by-one error .\" that meant that we could create one more segment than SHMMNI -- MTK .\" This /proc file is not available in Linux 2.2 and earlier -- MTK Sous Linux, cette limite peut être lue et modifiée grâce au fichier \fI/proc/sys/kernel/shmmni\fP). .PP L'implémentation n'a pas de limite spécifique pour le nombre maximal de segments partagés par processus (\fBSHMSEG\fP). .SS "Notes pour Linux" Jusqu'à Linux\ 2.3.30, Linux renvoyait l'erreur \fBEIDRM\fP pour un \fBshmget\fP() sur un segment de mémoire marqué pour destruction. .SH BOGUES Le choix du nom \fBIPC_PRIVATE\fP est malheureux, \fBIPC_NEW\fP aurait mieux décrit sa fonction. .SH EXEMPLES Consultez \fBshmop\fP(2). .SH "VOIR AUSSI" \fBmemfd_create\fP(2), \fBshmat\fP(2), \fBshmctl\fP(2), \fBshmdt\fP(2), \fBftok\fP(3), \fBcapabilities\fP(7), \fBshm_overview\fP(7), \fBsysvipc\fP(7) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .