.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl) .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" Translated into german by Martin Schulze (joey@finlandia.infodrom.north.de) .\" .TH MMAP 2 "15. Juni 1996" "Linux 1.3.86" "Systemaufrufe" .SH BEZEICHNUNG mmap, munmap \- lege Dateien oder Devices in Speicherbereich .SH "ÜBERSICHT" .B #include .br .B #include .sp .B #ifdef _POSIX_MAPPED_FILES .sp .BI "void * mmap(void *" start ", size_t " length ", int " prot .BI ", int " flags ", int " fd ", off_t " offset ); .sp .BI "int munmap(void *" start ", size_t " length ); .sp .B #endif .SH BESCHREIBUNG Die Funktion .B mmap projiziert .I length Bytes von der Datei (oder einem anderen Objekt) .IR fd ab Offset .IR offset in einen Speicherbereich, vorzugsweise ab der Adresse .IR start . Die letzte Adresse ist nur ein Tip und wird normalerweise nicht angegeben, indem 0 eingetragen wird. Der tatsächliche Platz, an den das Objekt projiziert wurde, wird von .B mmap zurückgegeben. Der Parameter .I prot beschreibt den gewünschte Speicherschutz. Er besteht aus folgenden Bits: .TP .B PROT_EXEC Die Seiten können ausgeführt werden. .TP .B PROT_READ Die Seiten dürfen gelesen werden. .TP .B PROT_WRITE Die Seiten dürfen beschrieben werden. .LP Der Parameter .I flags gibt den Typ des zu projizierenden Objekts und Projektionsoptionen an, sowie ob Veränderungen an der Kopie des projizierten Objekts für den Prozess privat sind oder mit anderen Referenzen gemeinsam genutzt werden. Er besteht aus folgenden Bits: .TP .B MAP_FIXED Verwende keine andere Adresse also die angegebene. Wenn die angegebene Adresse nicht benutzt werden kann, wird .B mmap fehlschlagen. Wenn MAP_FIXED angegeben ist, muss .I start ein Vielfaches der Seitengröße sein. Von der Verwendung dieser Option wird abgeraten. .TP .B MAP_SHARED Die Seiten dürfen mit anderen Prozessen, die dieses Objekt ebenfalls in den Speicher projizieren, gemeinsam benutzt werden. .TP .B MAP_PRIVATE Lege eine private Copy-on-Write-Projektion des Objekts an. .LP Die obigen drei Flags sind in POSIX.4 beschrieben. Linux kennt zusätzlich noch MAP_DENYWRITE, MAP_EXECUTABLE und MAP_ANON(YMOUS). Der .BR munmap \-Systemaufruf löscht die Projektionen im angegebenen Speicherbereich. Zukünftige Zugriffe auf diesen Adressraum erzeugen einen Fehler vom Typ "invalid memory reference" - Ungültiger Speicherzugriff. .SH "RÜCKGABEWERT" Bei Erfolg gibt .B mmap einen Zeiger auf den projizierten Speicherbereich zurück. Bei Fehlern wird MAP_FAILED (\-1) zurückgegeben und .I errno entsprechend gesetzt. Bei erfolgreicher Ausführung gibt .B munmap 0 zurück, bei Fehlern \-1 und setzt .I errno (meistens auf EINVAL). .SH FEHLER .TP .B EBADF .I fd ist kein gültiger Dateideskriptor (und MAP_ANONYMOUS wurde nicht angegeben). .TP .B EACCES MAP_PRIVATE wurde angegeben, aber .I fd wurde nicht zum Lesen geöffnet. Oder MAP_SHARED wurde spezifiziert, PROT_WRITE ist gesetzt und .I fd ist nicht zum Schreiben geöffnet. .TP .B EINVAL Die Adressen, die durch .IR start ", " length " und " offset angegeben wurden, sind ungültig. (Z.B. sind sie zu groß oder nicht an der Speicherseitengröße ausgerichtet.) .TP .B ETXTBUSY MAP_DENYWRITE wurde angegeben, aber das Objekt, das durch .I fd bezeichnet wurde, ist zum Schreiben geöffnet. .TP .B EAGAIN Die Datei ist gelockt (wird von einem anderen Prozess oder Thread gehalten) oder zuviel Speicher ist gelockt. .TP .B ENOMEM Es steht kein Speicher mehr zur Verfügung. .SH "KONFORM ZU" POSIX.4. .SH "SIEHE AUCH" .BR getpagesize (2), .BR msync (2), .BR shm_open (2), B.O. Gallmeister POSIX.4 O'Reilly pp. 128-129 and 389-391.