.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C) 1996 Andries Brouwer .\" and Copyright (C) 2006, 2007 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified 1997-01-31 by Eric S. Raymond .\" Modified 2000-03-25 by Jim Van Zandt .\" Modified 2001-10-04 by John Levon .\" Modified 2003-02-02 by Andi Kleen .\" Modified 2003-05-21 by Michael Kerrisk .\" MAP_LOCKED works from Linux 2.5.37 .\" Modified 2004-06-17 by Michael Kerrisk .\" Modified 2004-09-11 by aeb .\" Modified 2004-12-08, from Eric Estievenart .\" Modified 2004-12-08, mtk, formatting tidy-ups .\" Modified 2006-12-04, mtk, various parts rewritten .\" 2007-07-10, mtk, Added an example program. .\" 2008-11-18, mtk, document MAP_STACK .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH mmap 2 "20 juli 2023" "Linux man\-pagina's 6.05.01" .SH NAAM mmap, munmap \- leg\-uit of ont\-leg\-uit bestanden of apparaten in het werkgeheugen .SH BIBLIOTHEEK Standard C bibliotheek (\fIlibc\fP, \fI\-lc\fP) .SH SAMENVATTING .nf \fB#include \fP .PP \fBvoid *mmap(void *\fP\fIstart\fP\fB, size_t \fP\fIlengte\fP\fB, int \fP\fIprot\fP\fB, int \fP\fIvlaggen\fP\fB,\fP \fB int \fP\fIbi\fP\fB, off_t \fP\fIpositie\fP\fB);\fP \fBint munmap(void \fP\fIstart\fP\fB[.\fP\fIlengte\fP\fB], size_t \fP\fIlengte\fP\fB);\fP .fi .PP Zie NOTITIES voor informatie over functie test macro vereisten. .SH BESCHRIJVING \fBmmap\fP() maakt nieuwe uit\-legging aan in de virtuele adres ruimte van het aanroepende proces. Het begin adres van de nieuwe uit\-legging wordt opgegeven in \fIstart\fP. Het \fIlengte\fP argument specificeert de lengte van de uit\-legging (die groter moet zijn dan 0). .PP .\" Before Linux 2.6.24, the address was rounded up to the next page .\" boundary; since Linux 2.6.24, it is rounded down! Als \fIstart\fP NULL is, dan kiest de kernel een (aan een pagina\-uitgelijnd) adres waarop de uit\-legging gemaakt moet worden; dit is de meest overdraagbare methode van het aanmaken van een nieuwe uit\-legging. Als \fIstart\fP niet NULL is, dan gebruikt de kernel het als een hint waarop de uit\-legging geplaatst zou moeten worden; op Linux, zal de kernel een nabijgelegen pagina grens selecteren (maar altijd hoger of gelijk aan de waarde opgegeven in \fI/proc/sys/vm/mmap_min_addr\fP) en proberen om daar de uit\-legging te maken. Als daar al een andere uit\-legging bestaat, dan selecteert de kernel een nieuw adres dat al of niet afhankelijk is van de hint. Het adres van de nieuwe uit\-legging wordt teruggegeven als resultaat van de aanroep. .PP De inhoud van de bestand uit\-legging (in tegenstelling tot een anonieme uit\-legging; zie \fBMAP_ANONYMOUS\fP hieronder), wordt geïnitialiseerd door \fIlengte\fP bytes beginnende bij de \fIpositie\fP in het bestand (of ander object( aangewezen door de bestandsindicator \fIbi\fP. \fIpositie\fP moet een meervoud zijn van de pagina grootte zoals teruggegeven door \fIsysconf(_SC_PAGE_SIZE)\fP. .PP Nadat de \fBmmap\fP() aanroep is beëindigt kan de bestandsindicator \fIbi\fP onmiddellijk worden gesloten zonder het ongeldig maken van de uit\-legging. .PP Het \fIprot\fP argument beschrijft de vereiste geheugen bescherming van de uit\-legging (dit moet niet conflicteren met de open modus van het bestand). Het is of \fBPROT_NONE\fP of de bitsgewijze OR of een een of meer van de volgende vlaggen: .TP 1.1i \fBPROT_EXEC\fP Pagina's mogen uitgevoerd worden. .TP \fBPROT_READ\fP Pagina's mogen gelezen worden. .TP \fBPROT_WRITE\fP Pagina's mogen geschreven worden. .TP \fBPROT_NONE\fP .\" Pagina's zijn niet toegankelijk. .SS "Het vlaggen argument" De \fIvlaggen\fP argument bepaald of updates van de uit\-legging zichtbaar zijn voor andere proces uit\-leggingen in dezelfde regio, en of updates worden doorgegeven naar het onderliggende bestand. Het gedrag wordt bepaald door exact een van de volgende waarden in \fIvlaggen\fP: .TP \fBMAP_SHARED\fP Deel deze uit\-legging. Updates van deze uit\-legging zijn zichtbaar voor andere proces uitleggingen in dezelfde regio, en (in het geval van een bestands uit\-legging) worden doorgegeven naar het onderliggende bestand. (Om precies te bepalen wanneer updates worden uitgevoerd naar het onderliggende bestand is het nodig om \fBmsync\fP(2) te gebruiken.) .TP \fBMAP_SHARED_VALIDATE\fP (sinds Linux 4.15) Deze vlag voorziet in hetzelfde gedrag als \fBMAP_SHARED\fP behalve dat \fBMAP_SHARED\fP uit\-leggingen negeert bij onbekende vlaggen in \fIvlaggen\fP. Wanneer daarentegen een uit\-legging wordt gemaakt met \fBMAP_SHARED_VALIDATE\fP, dan verifieert de kernel of alle doorgegeven vlaggen bekend zijn en stopt met het aanmaken met de fout \fBEOPNOTSUPP\fP voor onbekende vlaggen. Het uit\-legging type is ook vereist om in staat te zijn om sommige uit\-leggings vlaggen te gebruiken (b.v., \fBMAP_SYNC\fP). .TP \fBMAP_PRIVATE\fP Maakt een kopiëren\-op\-schrijven uit\-legging aan. Updates aan de uit\-legging zijn niet zichtbaar voor andere processen die hetzelfde bestand bewerken, en worden niet doorgegeven aan het onderliggende bestand. Niet gespecificeerd is of veranderingen gemaakt aan het bestand na de \fBmmap\fP() aanroep zichtbaar zijn in de uit\-leggings regio. .PP Zowel \fBMAP_SHARED\fP en \fBMAP_PRIVATE\fP worden beschreven in POSIX.1\-2001 en POSIX.1\-2008. \fBMAP_SHARED_VALIDATE\fP is een Linux uitbreiding. .PP In aanvulling, nul of meer van de volgende waarden kunnen worden geOF´ed in \fIvlaggen\fP: .TP \fBMAP_32BIT\fP (sinds Linux 2.4.20, 2.6) .\" See http://lwn.net/Articles/294642 "Tangled up in threads", 19 Aug 08 Plaats de uit\-legging in de eerste 2 gigabyte van de proces adres ruimte. Deze vlag wordt alleen op een x86\-64 ondersteund, voor 64\-bit programma´s. Hij werd toegevoegd om thread stacks toe te staan ergens in de eerste 2\ GB van het geheugen, om zo de context\-switch prestaties van de eerste 64\-bit processoren te verbeteren. Moderne x86\-64 processoren hebben dit prestatie probleem niet meer, daarom is deze vlag op die systemen niet meer nodig. De \fBMAP_32BIT\fP vlag wordt genegeerd als \fBMAP_FIXED\fP is gezet. .TP \fBMAP_ANON\fP Synoniem voor \fBMAP_ANONYMOUS\fP; voorzien voor overdraagbaarheid met andere implementaties. .TP \fBMAP_ANONYMOUS\fP .\" See the pgoff overflow check in do_mmap(). .\" See the offset check in sys_mmap in arch/x86/kernel/sys_x86_64.c. De uit\-legging wordt niet ondersteund door enig bestand; zijn inhoud wordt op nul geïnitialiseerd. Het \fIbi\fP argument wordt genegeerd; hoewel sommige implementaties vereisen dat \fIbi\fP \-1 is indien de \fBMAP_ANONYMOUS\fP (of \fBMAP_ANON\fP) werd opgegeven, en overdraagbare applicaties zouden die moeten zeker stellen. Het \fIpositie\fP argument moet nul zijn. Het gebruik van \fBMAP_ANONYMOUS\fP in verbinding met \fBMAP_SHARED\fP wordt alleen ondersteund op Linux 2.4. .TP \fBMAP_DENYWRITE\fP .\" Introduced in 1.1.36, removed in 1.3.24. Deze vlag wordt genegeerd. (Lang geleden\(emLinux 2.0 en eerder\(emit signaleerde dat pogingen om te schrijven naar het onderliggende bestand zouden falen met \fBETXTBSY\fP. Maar dit bleek een bron voor denial\-of\-service aanvallen.) .TP \fBMAP_EXECUTABLE\fP .\" Introduced in 1.1.38, removed in 1.3.24. Flag tested in proc_follow_link. .\" (Long ago, it signaled that the underlying file is an executable. .\" However, that information was not really used anywhere.) .\" Linus talked about DOS related to MAP_EXECUTABLE, but he was thinking of .\" MAP_DENYWRITE? Deze vlag word genegeerd. .TP \fBMAP_FILE\fP .\" On some systems, this was required as the opposite of .\" MAP_ANONYMOUS -- mtk, 1 May 2007 Overdraagbaarheid vlag. Genegeerd. .TP \fBMAP_FIXED\fP Interpreteer \fIstart\fP niet als een hint: plaats de uit\-legging exact op dit adres. \fIstart\fP moet juist uitgelijnd zij: voor de meeste architecturen is een meervoud van de pagina grootte voldoende; hoewel sommige architecturen additionele beperkingen kunnen vereisen. Als de geheugen regio opgegeven door \fIstart\fP en \fIlengte\fP pagina´s overlapt van enige bestaande uit\-legging(en), dan wordt het overlappende deel van de bestaande uit\-legging verworpen. Als het opgegeven adres niet kan worden gebruikt dan zal \fBmmap\fP() falen. .IP Software die pretendeert overdraagbaar te zijn zou de \fBMAP_FIXED\fP vlag zorgvuldig moeten gebruiken, bedenk dat de exacte layout van de uit\-legging van een proces erg mag veranderen tussen Linux versies, C bibliotheek versie en versies van het besturingssysteem. \fILees de discussie over deze vlag in NOTITIES!\fP .TP \fBMAP_FIXED_NOREPLACE\fP (sinds Linux 4.17) .\" commit a4ff8e8620d3f4f50ac4b41e8067b7d395056843 Deze vlag voorziet in gedrag dat vergelijkbaar is met \fBMAP_FIXED\fP rekeninghoudende met de \fIstart\fP handhaving, maar verschilt erin dat \fBMAP_FIXED_NOREPLACE\fP nooit een reeds bestaand uit\-gelegd gebied vervuild. Indien het gevraagde gebied botst met een bestaande uit\-legging, dan faalt deze aanroep met de fout \fBEEXIST\fP. Deze vlag kan daarom worden gebruikt om op een atomaire manier (met het oog op andere threads) te proberen om een adres bereik uit te leggen: een thread zal slagen; alle andere zullen een fout rapporteren. .IP Let op dat oudere kernels die de \fBMAP_FIXED_NOREPLACE\fP vlag niet herkennen (bij het detecteren van een reeds bestaande uit\-legging) terug zullen vallen op een \[lq]niet\-\fBMAP_FIXED\[rq] type of behavior:\fP zij zullen een adres teruggeven dat verschilt van het gevraagde adres. Daarom moet overdraagbare software altijd het teruggegeven adres moeten vergelijken met het gevraagde adres. .TP \fBMAP_GROWSDOWN\fP Deze vlag wordt gebruikt door stacks. Hij geeft aan het virtuele geheugen systeem in de kernel aan dat de uit\-legging neerwaarts moet uitgebreid worden in het geheugen. Het teruggegeven adres is een pagina lager dan de het geheugen gebied dat daadwerkelijk is aangemaakt in de virtuele adres ruimte van het proces. Het aanraken van een adres in de "bewaakte" pagina onder de uit\-legging zal er voor zorgen dat de uit\-legging met een pagina groeit. Deze groei kan worden herhaald totdat de uit\-legging groeit tot in een pagina aan de hoge kant van de volgende lagere uit\-legging, waardoor het aanraken van een "bewaakte" pagina zal resulteren in een \fBSIGSEGV\fP signaal. .TP \fBMAP_HUGETLB\fP (sinds Linux 2.6.32) Ken de uit\-legging toe gebruik makend van "enorme" pagina´s. Zie het Linux kernel broncode bestand \fIDocumentation/admin\-guide/mm/hugetlbpage.rst\fP voor meer informatie, en ook NOTITIES, hieronder. .TP \fBMAP_HUGE_2MB\fP, \fBMAP_HUGE_1GB\fP (sinds Linux 3.8) .\" See https://lwn.net/Articles/533499/ Gebruikt in combinatie met \fBMAP_HUGETLB\fP om alternatieve hugetlb pagina maten te selecteren (respectievelijk 2\ MB en 1\ GB) op systemen die meerdere hugetlb pagina maten ondersteunen. .IP In het algemeen kan de gewenste enorme pagina worden geconfigureerd door op basis van de 2\-logaritme van de gewenste pagina grootte op de zes bits op de positie \fBMAP_HUGE_SHIFT\fP. (Een nul\-waarde in dit veld voorziet in de standaard enorme pagina grootte; de standaard enorme pagina grootte kan worden ontdekt door middel van het \fIHugepagesize\fP veld aangeduid in \fI/proc/meminfo\fP.) Daarom worden de twee constanten hierboven gedefinieerd als: .IP .in +4n .EX #define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT) #define MAP_HUGE_1GB (30 << MAP_HUGE_SHIFT) .EE .in .IP Het bereik van de enorme pagina maten die ondersteund worden door het systeem kan worden ontdekt door het oplijsten van de submappen in \fI/sys/kernel/mm/hugepages\fP. .TP \fBMAP_LOCKED\fP (sinds Linux 2.5.37) .\" If set, the mapped pages will not be swapped out. Markeer de uit\-gelegde regio op dezelfde manier opgesloten als \fBmlock\fP(2). Deze implementatie zal proberen het gehele gebied te beschrijven (voorgegeven) maar de \fBmmap\fP() aanroep faalt niet met \fBENOMEM\fP als dit mislukt. Daarom kunnen later forse fouten optreden. Daarom is de semantiek niet zo sterk als \fBmlock\fP(2). Men moet \fBmmap\fP() en \fBmlock\fP(2) gebruiken wanneer forse fouten niet geaccepteerd kunnen worden na de initialisatie van de uit\-legging. De \fBMAP_LOCKED\fP vlag wordt genegeerd in oudere kernels. .TP \fBMAP_NONBLOCK\fP (sinds Linux 2.5.46) .\" commit 54cb8821de07f2ffcd28c380ce9b93d5784b40d7 Deze vlag is alleen van betekenis in combinatie met \fBMAP_POPULATE\fP. Voer geen read\-ahead uit: creëer pagina tabel ingangen alleen voor pagina´s die al aanwezig zijn in RAM. Vanaf Linux 2.6.23 zorgt deze vlag ervoor dat \fBMAP_POPULATE\fP niks doet. Op een dag kan de combinatie van \fBMAP_POPULATE\fP en \fBMAP_NONBLOCK\fP opnieuw worden geïmplementeerd. .TP \fBMAP_NORESERVE\fP Reserveer geen swap ruimte voor deze uit\-legging. Indien de swap ruimte wordt gereserveerd, dan moet men garanderen dat het mogelijk is de uit\-legging te modificeren. Indien swap ruimte niet gereserveerd werd dan zou met een \fBSIGSEGV\fP kunnen krijgen bij het schrijven als geen fysiek geheugen beschikbaar is. Zie ook de discussie over het bestand \fI/proc/sys/vm/overcommit_memory\fP in \fBproc\fP(5). In Linux voor 2.6, had deze vlag alleen effect in private schrijfbare uit\-leggingen. .TP \fBMAP_POPULATE\fP (sinds Linux 2.5.46) Gebruik (voorgegeven) pagina tabellen voor een uit\-legging. Dit veroorzaakt het voor\-lezen van een bestand voor een bestands uit\-legging. Het helpt om het blokkeren van pagina fouten nadien te reduceren. De \fBmmap\fP() aanroep mislukt niet als de uit\-legging niet kan worden voorgegeven (bij voorbeeld, vanwege limitaties op het aantal uit\-gelegde enorme pagina´s bij het gebruik van \fBMAP_HUGETLB\fP). \fBMAP_POPULATE\fP wordt alleen ondersteund voor private uit\-leggingen vanaf Linux 2.6.23. .TP \fBMAP_STACK\fP (sinds Linux 2.6.27) Wijs de uit\-legging toe aan een adres dat geschikt is voor een proces of thread stack. .IP .\" See http://lwn.net/Articles/294642 "Tangled up in threads", 19 Aug 08 .\" commit cd98a04a59e2f94fa64d5bf1e26498d27427d5e7 .\" http://thread.gmane.org/gmane.linux.kernel/720412 .\" "pthread_create() slow for many threads; also time to revisit 64b .\" context switch optimization?" Deze vlag doet momenteel niks op Linux. Hoewel, door deze vlag te gebruiken kunnen applicaties zeker stellen dat zij transparant ondersteund worden zodra deze vlag in de toekomst ondersteund wordt. Dan zal hij worden gebruikt in de glibc threading implementatie om toe te staan dat sommige architecturen (later) speciale behandeling voor stack toewijzingen vereisen. En andere reden om deze vlag te gebruiken is overdraagbaarheid: \fBMAP_STACK\fP bestaat (en heeft een effect) op sommige andere systemen (b.v. sommige van de BSDs). .TP \fBMAP_SYNC\fP (sinds Linux 4.15) Deze vlag is alleen beschikbaar bij het \fBMAP_SHARED_VALIDATE\fP uit\-legging type; uit\-leggingen van het \fBMAP_SHARED\fP type negeren deze vlag stilzwijgend. Deze vlag wordt alleen ondersteund op bestanden die DAX (direct uit\-leggen van blijvend geheugen) ondersteunen. Voor andere bestanden, zal het aanmaken van een uit\-legging met deze vlag resulteren in een \fBEOPNOTSUPP\fP fout. .IP Gedeelde bestands uit\-leggingen met deze vlag voorzien in de garantie dat terwijl sommig geheugen schrijfbaar is uit\-gelegd in de adres ruimte van dat proces, het zichtbaar zal zijn in hetzelfde bestand op dezelfde positie, zelfs nadat het systeem is gecrasht of is geherstart. In combinatie met het gebruik van de gepaste CPU instructies, worden gebruikers van deze uit\-leggingen voorzien in een meer efficiënte manier van het persistent maken van de data wijzigingen. .TP \fBMAP_UNINITIALIZED\fP (vanaf Linux 2.6.33) Wis anonieme pagina´s niet. Deze vlag is bedoeld om prestaties te verbeteren op embedded apparaten. Deze vlag wordt alleen gebruikt indien de kernel werd geconfigureerd met de \fBCONFIG_MMAP_ALLOW_UNINITIALIZED\fP optie. Vanwege de veiligheid implicaties wordt deze optie alleen aangezet op embedded apparaten (m.a.w. apparaten waarin met complete controle heeft over de inhoud van het geheugen. .PP .\" FIXME . for later review when Issue 8 is one day released... .\" POSIX may add MAP_ANON in the future .\" http://austingroupbugs.net/tag_view_page.php?tag_id=8 .\" http://austingroupbugs.net/view.php?id=850 Van de bovenstaande vlaggen is alleen \fBMAP_FIXED\fP gespecificeerd in POSIX.1\-2001 en POSIX.1\-2008. Hoewel de meeste systemen ook \fBMAP_ANONYMOUS\fP ondersteunen (of zijn synoniem \fBMAP_ANON\fP). .SS munmap() De \fBmummap\fP() systeem aanroep verwijderd de uit\-leggingen voor het aangegeven adres gebied, en zorgt er voor dat verdere referenties naar adressen in het gebied niet\-geldige geheugen referenties op leveren. Het gebied wordt ook automatisch ont\-uit\-gelegd wanneer het proces wordt beëindigt. Aan de andere kant zal het sluiten van de bestandsindicator het gebied niet on\-uitleggen. .PP Het adres \fIstart\fP moet een meervoud zijn van de pagina grootte (maar \fIlengte\fP hoeft dat niet te zijn). Alle pagina´s die een deel van het aangegeven gebied bevatten worden ont\-uit\-gelegd, en volgende referenties naar deze pagina´s zullen een \fBSIGSEGV\fP opleveren. Het is geen fout als het aangegeven gebied enige uit\-gelegde pagina´s bevat. .SH "EIND WAARDE" Bij succes geeft \fBmmap\fP() een pointer naar een uit\-gelegd gebied terug. Bij een fout, wordt de waarde \fBMAP_FAILED\fP (dat is, \fI(void\ *)\ \-1\fP) terug gegeven, en wordt \fIerrno\fP overeenkomstig gezet. .PP Bij succes geeft \fBmunmap\fP() 0 terug. Bij falen geeft het \-1 terug en \fIerrno\fP wordt overeenkomstig gezet (waarschijnlijk op \fBEINVAL\fP). .SH FOUTEN .TP \fBEACCES\fP Een bestands indicator wijst naar een niet\-regulier bestand. Of een bestands uit\-legging werd gevraagd, maar \fIbi\fP is niet open voor lezen. Of \fBMAP_SHARED\fP werd gevraagd en \fBPROT_WRITE\fP is gezet, maar \fIbi\fP is niet open in schrijf/lees (\fBO_RDWR\fP) modus. Of \fBPROT_WRITE\fP werd gezet, maar het bestand is alleen\-achteraan\-toevoegen. .TP \fBEAGAIN\fP Het bestand was vergrendeld of teveel geheugen was vergrendeld (zie \fBsetrlimit\fP(2)). .TP \fBEBADF\fP \fIbi\fP is geen geldige bestandindicator (en \fBMAP_ANONYMOUS\fP was niet gezet). .TP \fBEEXIST\fP \fBMAP_FIXED_NOREPLACE\fP werd specified in \fIvlaggen\fP, en het bereik bedekt door \fIstart\fP and \fIlengte\fP botst met een bestand .TP \fBEINVAL\fP We houden niet van \fIstart\fP of \fIlengte\fP of \fIpositie\fP (ze zijn b.v. te groot of niet uitgelijnd op een pagina grens. .TP \fBEINVAL\fP (sinds Linux 2.6.12) \fIlengte\fP was 0. .TP \fBEINVAL\fP \fIvlaggen\fP bevatte noch \fBMAP_PRIVATE\fP, \fBMAP_SHARED\fP, of \fBMAP_SHARED_VALIDATE\fP. .TP \fBENFILE\fP .\" This is for shared anonymous segments .\" [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp() .\" .TP .\" .B ENOEXEC .\" A file could not be mapped for reading. De grens aan het aantal open bestanden van het systeem is bereikt. .TP \fBENODEV\fP Het onderliggende bestandssysteem van het opgegeven bestand ondersteund uit\-leggen van het geheugen niet. .TP \fBENOMEM\fP Geen geheugen beschikbaar. .TP \fBENOMEM\fP Het maximaal aantal uit\-leggingen zou zijn overschreden. Deze fout kan ook optreden voor \fBmunmap\fP() bij het on\-uitleggen van een regio in het midden van een bestaande uit\-legging, omdat dit resulteert in twee kleinere uit\-leggingen aan beide zijden van de regio die ont\-uit\-gelegd wordt. .TP \fBENOMEM\fP (vanaf Linux 4.7) De proces limiet \fBRLIMIT_DATA\fP beschreven in \fBgetrlimit\fP(2), zou zijn overschreden. .TP \fBENOMEM\fP We houden niet van \fIstart\fP, omdat dit de virtuele adres ruimte van de CPU overschrijd. .TP \fBEOVERFLOW\fP Op 32\-bit architecturen samen met de grote bestand uitbreiding (m.a.w. gebruik van 64\-bit \fIoff_t\fP): het aantal pagina´s gebruikt voor \fIlengte\fP plus het aantal pagina´s gebruikt voor \fIpositie\fP zou de \fIunsigned long\fP (32 bits) overlopen. .TP \fBEPERM\fP .\" (Since Linux 2.4.25 / Linux 2.6.0.) Het \fIprot\fP argument vraag om \fBPROT_EXEC\fP maar het uitgelegde gebied behoort bij een bestand op een bestandssysteem dat als niet\-executeerbaar gekoppeld is. .TP \fBEPERM\fP De operatie werd voorkomen door een bestandszegel; zie \fBfcntl\fP(2). .TP \fBEPERM\fP De \fBMAP_HUGETLB\fP vlag werd opgegeven, maar de aanroeper was niet gerechtigd (had niet de \fBCAP_IPC_LOCK\fP capaciteit) en is geen lid van de \fIsysctl_hugetlb_shm_group\fP groep; zie de beschrijving van \fI/proc/sys/vm/sysctl_hugetlb_shm_group\fP in .TP \fBETXTBSY\fP \fBMAP_DENYWRITE\fP werd gezet maar het voorwerp opgegeven door \fIbi\fP is open voor schrijven. .PP Het gebruik van een uit\-gelegde regio kan resulteren in deze signalen: .TP \fBSIGSEGV\fP Poging om te schrijven in een als alleen\-lezen uit\-gelegd gebied. .TP \fBSIGBUS\fP Een toegangspoging naar een pagina van de buffer die verder ligt dan het einde van het in kaart gebrachte bestand. Voor een uitleg van de behandeling van de bytes in de pagina die overeenkomt met het einde van een in kaart gebracht bestand die geen meervoud is van de pagina grootte, zie NOTITIES. .SH ATTRIBUTEN Voor een uitleg van de termen in deze sectie, zie \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Interface Attribuut Waarde T{ .na .nh \fBmmap\fP(), \fBmunmap\fP() T} Thread veiligheid MT\-Safe .TE .sp 1 .SH VERSIES Op sommige hardware architecturen (b.v. i386), impliceert \fBPROT_WRITE\fP \fBPROT_READ\fP. Het is architectuur afhankelijk of \fBPROT_READ\fP al dan niet \fBPROT_EXEC\fP impliceert. Overdraagbare programma´s zouden altijd \fBPROT_EXEC\fP moeten zetten als ze van plan zijn om code uit te voeren in het nieuwe overzicht. .PP De overdraagbare manier om uit\-leggingen te maken is door \fIstart\fP als 0 (NULL) op te geven, en \fBMAP_FIXED\fP weg te laten uit \fIvlaggen\fP. In dat geval kiest het systeem het adres voor de uit\-legging; dit adres wordt zodanig gekozen dat het niet conflicteert met enige bestaande uit\-legging, en zal niet 0 zijn. Als de \fBMAP_FIXED\fP flag werd opgegeven, en \fIstart\fP is 0 (NULL), dan zal het uit\-gelegde adres 0 (NULL) zijn. .PP Bepaalde \fIvlaggen\fP constanten zijn alleen gedefinieerd als bepaalde feature test macro´s werden gedefinieerd (mogelijk standaard): \fB_DEFAULT_SOURCE\fP met glibc 2.19 of later; of \fB_BSD_SOURCE\fP of \fB_SVID_SOURCE\fP in glibc 2.19 en eerder. (Gebruik van \fB_GNU_SOURCE\fP is genoeg, deze macro specifiek vereisen zou meer logisch geweest zijn, omdat deze vlaggen allen Linux\-specifiek zijn.) De relevante vlaggen zijn: \fBMAP_32BIT\fP, \fBMAP_ANONYMOUS\fP (en zijn synoniem \fBMAP_ANON\fP), \fBMAP_DENYWRITE\fP, \fBMAP_EXECUTABLE\fP, \fBMAP_FILE\fP, \fBMAP_GROWSDOWN\fP, \fBMAP_HUGETLB\fP, \fBMAP_LOCKED\fP, \fBMAP_NONBLOCK\fP, \fBMAP_NORESERVE\fP, \fBMAP_POPULATE\fP, en \fBMAP_STACK\fP. .SS "C library/kernel verschillen" .\" Since around glibc 2.1/2.2, depending on the platform. Deze pagina beschrijft het interface waarin glibc \fBmmap\fP() omwikkel functie voorziet. Origineel riep deze functie een systeem aanroep aan van dezelfde naam. Vanaf Linux 2.4 is deze systeem aanroep opgevolgd door \fBmmap2\fP(2), en momenteel roept de glibc \fBmmap\fP() omwikkel functie \fBmmap2\fP(2) met een geschikt aangepaste waarde voor \fIpositie\fP. .SH "VOLDOET AAN" POSIX.1\-2008. .SH GESCHIEDENIS .\" SVr4 documents additional error codes ENXIO and ENODEV. .\" SUSv2 documents additional error codes EMFILE and EOVERFLOW. POSIX.1\-2001, SVr4, 4.4BSD. .PP .\" POSIX.1-2001: It shall be defined to -1 or 0 or 200112L. .\" -1: unavailable, 0: ask using sysconf(). .\" glibc defines it to 1. Op POSIX systemen waarop \fBmmap\fP(), \fBmsync\fP(2), en \fBmunmap\fP() beschikbaar zijn, is \fB_POSIX_MAPPED_FILES\fP gedefinieerd in \fI\fP met een waarde groter dan 0. (Zie ook \fBsysconf\fP(3).) .SH OPMERKINGEN Door \fBmmap\fP() in kaart gebracht geheugen wordt bewaard langs \fBfork\fP(2), met dezelfde attributen. .PP Een bestand is uit\-gelegd in meervouden van de pagina grootte. Van een bestand dat geen meervoud van de pagina grootte is, worden de resterende bytes in de gedeeltelijke pagina aan het einde van de uit\-legging op nul gezet tijdens het uit\-leggen, en modificaties aan die regio worden niet geschreven naar het bestand. Het effect van de verandering van de grootte van het onderliggende bestand van een uit\-legging op de pagina´s die overeenkomen met toegevoegde of verwijderde regio´s van dat bestand is niet gespecificeerd. .PP .\" Een applicatie kan bepalen welke pagina´s van een uit\-legging aanwezig zijn in de buffer/pagina cache door \fBmincore\fP(2) te gebruiken. .SS "Gebruik MAP_FIXED veilig" Het enige veilige gebruik van \fBMAP_FIXED\fP is indien het adresbereik gespecificeerd door \fIstart\fP en \fIlengte\fP voordien gereserveerd werd door een andere uit\-legging; anders is het gebruik van \fBMAP_FIXED\fP foutgevoelig om het bestaande uit\-leggingen geforceerd verwijderd, hetgeen het mogelijk maakt voor een multithreaded proces om zijn eigen adresruimte te corrumperen. .PP Bijvoorbeeld, neem aan dat thread A door \fI/proc/\fPpid\fI/maps\fP loopt om de niet gebruikte adres ruimte te vinden die het kan uit\-leggen door \fBMAP_FIXED\fP te gebruiken, terwijl thread B tegelijkertijd een deel of alles van dezelfde adres ruimte acquireert. Wanneer nu thread A vervolgens \fBmmap(MAP_FIXED)\fP gebruikt dan zal deze effectief de uit\-legging die thread B maakte kapot maken. In dit scenario zou thread B niet direct een uit\-legging moeten maken; eenvoudig weg het aanroepen van een bibliotheek functie die, intern, \fBdlopen\fP(3) gebruikt, om een andere gedeelde bibliotheek te laden, is voldoende. De \fBdlopen\fP(3) aanroep zal de bibliotheek op de adresruimte van het proces uit\-leggen. Bovendien kan bijna elke bibliotheek aanroep worden geïmplementeerd op een manier die geheugen uit\-legging toevoegt aan de adres ruimte, ofwel met deze techniek, ofwel door eenvoudigweg geheugen te alloceren. Voorbeelden hiervan zijn onder anderen \fBbrk\fP(2), \fBmalloc\fP(3), \fBpthread_create\fP(3), en de PAM bibliotheken .UR http://www.linux\-pam.org .UE . .PP .\" Vanaf Linux 4.17 kan een multithreaded programma de \fBMAP_FIXED_NOREPLACE\fP vlaggen gebruiken om het hierboven beschreven gevaar te voorkomen bij het aanmaken van een uit\-legging op een vast adres dat werd gereserveerd door een bestaande uit\-legging. .SS "Tijdstempel veranderingen voor bestand\-backed uit\-leggingen" Voor bestand\-backed uit\-leggingen, mag het \fIst_atime\fP veld van het uit\-gelegde bestand worden geüpdatet met elk tijdstip tussen de \fBmmap\fP() en de daarmee overeenkomende ont\-uit\-legging; de eerste referentie naar een uit\-gelegde pagina zal het veld updaten als het al niet geüpdatet was. .PP .\" De \fIst_ctime\fP en \fIst_mtime\fP velden voor een uit\-gelegd bestand met \fBPROT_WRITE\fP en \fBMAP_SHARED\fP worden geüpdatet na het schrijven naar een uit\-gelegde regio, en voor een volgende \fBmsync\fP(2) met de \fBMS_SYNC\fP of \fBMS_ASYNC\fP vlag, als er een optreed. .SS "Enorme pagina (ENORME TLB) uit\-leggingen." Voor uit\-leggingen die enorme pagina´s gebruiken, verschillen de eisen voor de argumenten van \fBmmap\fP() en \fBmunmap\fP() iets van de eisen voor de uit\-leggingen die de eigen systeem pagina grootte gebruiken. .PP Voor \fBmmap\fP(), moet \fIpositie\fP en \fIlengte\fP een meervoud van de onderliggende enorme pagina grootte zijn. Het systeem lijnt automatisch \fIlengte\fP op een meervoud van de onderliggende enorme pagina grootte aan. .PP .\" Voor \fBmunmap\fP(), \fIstart\fP en \fIlengte\fP moeten beiden een meervoud van de onderliggende enorme pagina grootte zijn. .SH BUGS Op Linux zijn er geen garanties zoals die, die hierboven gesuggereerd werden onder \fBMAP_NORESERVE\fP. Standaard kan elke proces op elke moment worden beëindigd zodra het geheugen van het systeem vol raakt. .PP In Linux vóór 2.6.7, heeft de \fBMAP_POPULATE\fP vlag alleen effect als \fIprot\fP werd opgegeven als \fBPROT_NONE\fP .PP SUSv3 specificeert dat \fBmmap\fP() moet falen als \fIlength\fP 0 is. Echter, in kernels voor 2.6.12, was \fBmmap\fP() succesvol in dit geval: er werd geen uit\-legging gemaakt en de aanroep retourneerde \fIadres\fP. Vanaf Linux 2.6.12, faalt \fBmmap\fP() in dit geval met de foutmelding \fBEINVAL\fP. .PP POSIX specificeert dat het systeem altijd enige gedeeltelijke pagina vult met nullen aan het einde van een object en dat het systeem nooit enige wijziging van het object zal schrijven voorbij zijn einde. Wanneer u data schrijft naar zo´n gedeeltelijke pagina na het einde van een object op Linux, dan zal deze data op de pagina cache aanwezig blijven zelfs nadat het bestand werd gesloten en ont\-uit\-gelegd en zelfs als de data nooit werd geschreven naar het bestand zelf, volgende uit\-leggingen kunnen de gewijzigde inhoud zien. In sommige gevallen kan dit worden opgelost door het aanroepen van \fBmsync\fP(2) voordat het ont\-uit\-leggen plaats vind; hoewel dit niet werkt voor \fBtmpfs\fP(5), (b.v. bij het gebruik van het van het POSIX gedeeld geheugen interface, zoals gedocumenteerd in \fBshm_overview\fP(7)). .SH VOORBEELDEN .\" FIXME . Add an example here that uses an anonymous shared region for .\" IPC between parent and child. Het volgende programma schrijft delen van het bestand, opgegeven in het eerste argument op de commando regel, naar standaard uitvoer. Het bereik van de te schrijven bytes wordt bepaald door middel van de positie en lengte waarden opgegeven in het tweede en derde argument op de commando regel. Het programma maakt een geheugen uit\-legging aan van de vereiste pagina´s van het bestand en gebruikt vervolgens \fBwrite\fP(2) om de gewenste bytes te tonen. .SS "Programma bron" .\" SRC BEGIN (mmap.c) .EX #include #include #include #include #include #include \& #define handle_error(msg) \e do { perror(msg); exit(EXIT_FAILURE); } while (0) \& int main(int argc, char *argv[]) { int fd; char *addr; off_t offset, pa_offset; size_t length; ssize_t s; struct stat sb; \& if (argc < 3 || argc > 4) { fprintf(stderr, "%s bestand plaats [lengte]\en", argv[0]); exit(EXIT_FAILURE); } \& fd = open(argv[1], O_RDONLY); if (fd == \-1) handle_error("open"); \& if (fstat(fd, &sb) == \-1) /* Om bestandsgrootte te verkrijgen */ handle_error("fstat"); \& offset = atoi(argv[2]); pa_offset = offset & \[ti](sysconf(_SC_PAGE_SIZE) \- 1); /* plaats voor mmap() dient aangepast te zijn aan een pagina */ \& if (offset >= sb.st_size) { fprintf(stderr, "plaats is na het einde van het bestand\en"); exit(EXIT_FAILURE); } \& if (argc == 4) { length = atoi(argv[3]); if (offset + length > sb.st_size) length = sb.st_size \- offset; /* Can\[aq]t display bytes past end of file */ \& } else { /* No length arg ==> display to end of file */ length = sb.st_size \- offset; } \& addr = mmap(NULL, length + offset \- pa_offset, PROT_READ, MAP_PRIVATE, fd, pa_offset); if (addr == MAP_FAILED) handle_error("mmap"); \& s = write(STDOUT_FILENO, addr + offset \- pa_offset, length); if (s != length) { if (s == \-1) handle_error("write"); \& fprintf(stderr, "partial write"); exit(EXIT_FAILURE); } \& munmap(addr, length + offset \- pa_offset); close(fd); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "ZIE OOK" \fBftruncate\fP(2), \fBgetpagesize\fP(2), \fBmemfd_create\fP(2), \fBmincore\fP(2), \fBmlock\fP(2), \fBmmap2\fP(2), \fBmprotect\fP(2), \fBmremap\fP(2), \fBmsync\fP(2), \fBremap_file_pages\fP(2), \fBsetrlimit\fP(2), \fBshmat\fP(2), \fBuserfaultfd\fP(2), \fBshm_open\fP(3), \fBshm_overview\fP(7) .PP De beschrijving van de volgende bestanden in \fBproc\fP(5): \fI/proc/\fPpid\fI/maps\fP, \fI/proc/\fPpid\fI/map_files\fP, and \fI/proc/\fPpid\fI/smaps\fP. .PP B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128\[en]129 en 389\[en]391. .\" .\" Repeat after me: private read-only mappings are 100% equivalent to .\" shared read-only mappings. No ifs, buts, or maybes. -- Linus .PP .SH VERTALING De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema , Mario Blättermann en Luc Castermans . .PP Deze vertaling is vrije documentatie; lees de .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID. .PP Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar .MT debian-l10n-dutch@lists.debian.org .ME .