Definition | #include <sys/mman.h> void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); | |||||||||||||||
Beschreibung |
Der Aufruf hat folgendes Format:
Zwischen dem Adressraum des Prozesses an der Adresse pa für len Bytes einerseits und der durch den Dateideskriptor fildes beschriebenen Datei mit dem Offset off für len-Bytes andererseits wird eine Abbildung hergestellt. Der Wert von pa ist eine implementierungsabhängige Funktion von addr und dem Wert flags. Ein erfolgreicher Aufruf von Die Abbildung, die durch Wenn die Größe der abgebildeten Datei nach dem Aufruf von
Der Parameter prot bestimmt, ob gelesen, geschrieben, ausgeführt oder Kombinationen dieser Zugriffe auf die abgebildeten Seiten erlaubt werden sollen. Die Zugriffsrechte werden in
Drei Zustände sind möglich:
Das Verhalten von Der Parameter flags enthält weitere Informationen über die Behandlung der abgebildeten Seiten. Die Optionen werden in
Wenn Wenn
Wenn Der Parameter off unterliegt bezüglich Größe und Ausrichtung Beschränkungen, die sich nach dem Rückgabewert von Das System führt Abbildungsoperationen über ganze Seiten aus. Da der Parameter len nicht an bestimmte Größen oder Ausrichtungen gebunden ist, bezieht das System jede Restseite, die bei der Abbildung des Bereiches [pa, pa + len) anfällt, mit in die Abbildungsoperation ein. Das System füllt solche Teilseiten am Ende eines Speicherbereiches [pa, pa + len) mit Nullen. Veränderungen dieses Bereichs werden nicht zurückgeschrieben. Falls sich die Abbildung auf ganze Seiten erstreckt, die hinter dem letzten Byte der Datei liegen, erzeugen Referenzen auf diese Seiten ein
Es besteht kein funktioneller Unterschied zwischen | |||||||||||||||
Returnwert | pa | Adresse, an der die Abbildung platziert wurde. | ||||||||||||||
| -1 | bei Fehler. | ||||||||||||||
Fehler |
| |||||||||||||||
|
| fildes ist nicht zum Lesen geöffnet, unabhängig von dem angegebenen prot-Argument, oder fildes ist nicht zum Schreiben geöffnet und bei einer Abbildung vom Typ | ||||||||||||||
|
| Die Abbildung kann im Speicher nicht gesperrt werden. | ||||||||||||||
|
| fildes ist kein gültiger offener Dateideskriptor. | ||||||||||||||
|
| Adressen im Bereich [off, off + len) sind für fildes ungültig. | ||||||||||||||
|
| Das Argument off (oder addr, wenn Der Wert in flags ist ungültig (weder Das Argument len hat einen Wert kleiner oder gleich 0. | ||||||||||||||
|
| Die Anzahl der Abbildungen überschreitet den maximal zulässigen Wert. | ||||||||||||||
|
|
| ||||||||||||||
| fildes bezieht sich auf eine Datei, deren Typ von | |||||||||||||||
| Der Wert von off plus len überschreitet das Offset-Maximum, das in der fildes zugeordneten internen Beschreibung der offenen Datei festgelegt ist. | |||||||||||||||
Hinweise | Die Verwendung von Die Angabe Die Anwendung muss auf eine Synchronisation der Dateizugriffe achten, wenn
fildes = open(...) lseek(fildes, some_offset) read(fildes, buf, len) /* Daten in buf verwenden */ Unter Verwendung von fildes = open(...) address =mmap(0, len, PROT_READ, MAP_PRIVATE, fildes, some_offset) /* Daten über address verwenden */ | |||||||||||||||
Siehe auch |
|