File di intestazione:
#includereSintassi:
void * mmap (void * indirizzo, dimensione_t lunghezza, int protezione, flag int, int filede,Argomenti:
La funzione prende 6 argomenti:
indirizzo:
Questo argomento fornisce un indirizzo iniziale preferito per la mappatura. Se non esiste un'altra mappatura, allora il kernel sceglierà un limite di pagina nelle vicinanze e creerà la mappatura; Altrimenti, il kernel sceglie un nuovo indirizzo. Se questo argomento è nullo, il kernel può posizionare la mappatura ovunque si vede in forma.
lunghezza:
Questo è il numero di byte che devono essere mappati.
proteggere:
Questo argomento è usato per controllare il tipo di accesso consentito. Questo argomento può essere logico "o" delle seguenti flag Prot_read | Prot_write | Prot_exec | Prot_none. I tipi di accesso di lettura, scrittura ed esecuzione sono le autorizzazioni sul contenuto.
Flag:
Questo argomento è usato per controllare la natura della mappa. Di seguito sono riportati alcuni valori comuni delle flag:
Filedes:
Questo è il descrittore di file che deve essere mappato.
compensare:
Questo è offset da dove è iniziata la mappatura dei file. In termini semplici, la mappatura si collega (compensare) A (offset+lunghezza-1) byte per il file aperto Deniugerati descrittore.
Valori di ritorno:
Sul successo, il mmap () Restituisce 0; Per fallimento, la funzione restituisce map_failad.
Patorialmente, possiamo rappresentare la funzione della mappa come segue:
Per una mappa la regione mappata munmap () La funzione viene utilizzata:
Sintassi:
int munmap(vuoto *indirizzo, size_t lunghezza);
Valori di ritorno:
Sul successo, il munmap () Restituisce 0; Per fallimento, la funzione restituisce -1.
Esempi:
Ora vedremo un programma di esempio per ciascuno dei seguenti usando la chiamata di sistema MMAP ():
Esempio 1.C
#includereNell'esempio1.c Allontamo la memoria usando MMAP. Qui abbiamo usato prot_read | Protezione prot_write per la lettura e la scrittura nella regione mappata. Abbiamo usato Map_Private | FLAG MAP_ANONYMOUS. Map_private viene utilizzato perché la regione di mappatura non è condivisa con altri processi e MAP_anonymous viene utilizzato perché qui non abbiamo mappato alcun file. Per lo stesso motivo, il Descrittore di file e il compensare Il valore è impostato su 0.
Esempio2.C
#includere