Hlavičkový súbor:
#includeSyntax:
void * mmap (void * adresa, size_t dĺžka, int ochrana, int príznaky, int podklady,offset_t)
Argumenty:
Funkcia má 6 argumentov:
1. adresa:
Tento argument poskytuje preferovanú začiatočnú adresu pre mapovanie. Ak tam iné mapovanie neexistuje, potom jadro vyberie hranicu blízkej stránky a vytvorí mapovanie; inak jadro vyberie novú adresu. Ak má tento argument hodnotu NULL, môže jadro umiestniť mapovanie na ľubovoľné miesto, ktoré uzná za vhodné.
2. dĺžka:
Toto je počet bajtov, ktoré sa majú mapovať.
3. chrániť:
Tento argument sa používa na kontrolu toho, aký druh prístupu je povolený. Tento argument môže byť logickým „ALEBO“ nasledujúcich príznakov PROT_READ | PROT_WRITE | PROT_EXEC | PROT_NONE. Typy prístupu na čítanie, zápis a vykonávanie sú povolenia pre obsah.
4. vlajky:
Tento argument sa používa na riadenie povahy mapy. Nasleduje niekoľko bežných hodnôt príznakov:
- MAP_SHARED: Tento príznak sa používa na zdieľanie mapovania so všetkými ostatnými procesmi, ktoré sú mapované na tento objekt. Zmeny vykonané v mapovacej oblasti sa zapíšu späť do súboru.
- MAP_PRIVATE: Ak sa použije tento príznak, mapovanie neuvidia žiadne ďalšie procesy a vykonané zmeny sa nezapíšu do súboru.
- MAP_ANONYMOUS / MAP_ANON: Tento príznak sa používa na vytvorenie anonymného mapovania. Anonymné mapovanie znamená, že mapovanie nie je spojené so žiadnymi súbormi. Toto mapovanie sa používa ako základný primitív na rozšírenie haldy.
- MAP_FIXED: Ak sa použije tento príznak, musí byť systém nútený použiť presnú mapovaciu adresu uvedenú v adresa Ak to nie je možné, mapovanie zlyhá.
5. kartotéky:
Toto je deskriptor súborov, ktorý musí byť mapovaný.
6. offset:
Toto je posunuté od miesta, kde začalo mapovanie súboru. Zjednodušene povedané, mapovanie sa spája s (offset) do (offset + dĺžka-1) bajtov pre súbor otvorený dňa kartotéky deskriptor.
Návratové hodnoty:
O úspechu mmap () vracia 0; pre zlyhanie funkcia vráti MAP_FAILED.
Obrázkovo môžeme funkciu mapy znázorniť nasledovne:
Na zrušenie mapovania mapovanej oblasti munmap () funkcia sa používa:
Syntax:
int munmap(neplatné *adresa, size_t dĺžka);
Návratové hodnoty:
O úspechu munmap () vracia 0; pri zlyhaní funkcia vráti -1.
Príklady:
Teraz uvidíme ukážkový program pre každé z nasledujúcich pomocou systémového volania mmap ():
- Pridelenie pamäte (príklad 1.c)
- Čítanie súboru (príklad 2.c)
- Zápisový súbor (Príklad3.c)
- Medziprocesová komunikácia (Príklad4.c)
Príklad 1.c
#include#include
int main ()
int N = 5; // Počet prvkov pre pole
int * ptr = mmap (NULL, N * sizeof (int),
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS,
0, 0);
if (ptr == MAP_FAILED)
printf ("Mapovanie zlyhalo \ n");
návrat 1;
// Vyplňte prvky poľa
pre (int i = 0; i ");
pre (int i = 0; i
printf ("\ n");
int err = munmap (ptr, 10 * sizeof (int));
ak (chyba != 0)
printf ("Unmapping Failed \ n");
návrat 1;
návrat 0;
V príklade 1.c alokujeme pamäť pomocou mmap. Tu sme použili PROT_READ | PROT_WRITE ochrana pre čítanie a zápis do mapovanej oblasti. Použili sme MAP_PRIVATE | Vlajka MAP_ANONYMOUS. MAP_PRIVATE sa používa, pretože mapovacia oblasť nie je zdieľaná s inými procesmi, a MAP_ANONYMOUS sa používa, pretože tu sme nemapovali žiadny súbor. Z rovnakého dôvodu deskriptor súborov a vyrovnať hodnota je nastavená na 0.
Príklad 2.c
#include#include
#include
#include
#include
#include
int main (int argc, char * argv [])
ak (argc < 2)
printf ("Cesta k súboru nie je uvedená \ n");
výstup (0);
const char * cesta_souboru = argv [1];
int fd = open (cesta k súboru, O_RDONLY);
ak (fd < 0)
printf ("\ n \"% s \ ""sa nepodarilo otvoriť \ n"",
cesta k súboru)