msync - eine Datei mit einem Speicherabbild synchronisieren
Standard-C-Bibliothek (
libc,
-lc)
#include <sys/mman.h>
int msync(void Adresse[.Länge], size_t Länge, int Schalter);
msync leitet Änderungen, die in der im Speicher befindlichen Kopie
einer Datei gemacht wurden, mittels
mmap(2) zurück in das
Dateisystem. Ohne Verwendung dieses Aufrufs besteht keine Garantie, dass
Änderungen auf die Platte geschrieben werden, bevor
munmap(2)
aufgerufen wird. Um genauer zu sein: Der Teil der Datei, der dem
Speicherbereich entspricht, der bei
Adresse anfängt und
Länge lang ist, wird aktualisiert.
Das Argument
Schalter sollte entweder
MS_ASYNC oder
MS_SYNC
angeben. Es kann zusätzlich das Bit
MS_INVALIDATE enthalten.
Diese Bits haben folgende Bedeutung:
- MS_ASYNC
- gibt an, dass eine Aktualisierung geplant wird, der Aufruf
jedoch sofort zurückkehrt.
- MS_SYNC
- fordert eine Aktualisierung an und wartet, bis sie
abgeschlossen ist.
- MS_INVALIDATE
- erbittet, dass andere Abbildungen der selben Datei
verworfen werden sollen (so dass sie mit den neuen nur geschriebenen
Werten aktualisiert werden können).
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1
zurückgegeben und
errno gesetzt, um den Fehler anzuzeigen.
- EBUSY
-
MS_INVALIDATE wurde in Schalter angegeben und
es existiert eine Speichersperre für den angegebenen
Adressbereich.
- EINVAL
-
adresse ist kein Vielfaches der
SEITENGRÖßE oder ein anderes Bit als MS_ASYNC |
MS_INVALIDATE | MS_SYNC ist in Schalter gesetzt oder
in schalter sind sowohl MS_SYNC als auch MS_ASYNC
gesetzt.
- ENOMEM
- Der angegebene Speicher (oder ein Teil davon) wurde nicht
abgebildet.
POSIX.1-2001, POSIX.1-2008.
Dieser Aufruf wurde in Linux 1.3.21 eingeführt und dann
EFAULT an
Stelle von
ENOMEM benutzt. In Linux 2.4.19 wurde dies auf den
POSIX-Wert
ENOMEM geändert.
Auf POSIX-Systemen, auf denen
msync() verfügbar ist, sind sowohl
_POSIX_MAPPED_FILES als auch
_POSIX_SYNCHRONIZED_IO in
<unistd.h> als ein Wert größer als 0 definiert.
(Siehe auch
sysconf(3).)
Gemäß POSIX muss entweder
MS_SYNC oder
MS_ASYNC in
Schalter angegeben werden und das tatsächliche Fehlschlagen beim
Einfügen von einem dieser Schalter wird dazu führen, dass
msync() auf einigen Systemen scheitert. Linux erlaubt jedoch einen
Aufruf von
msync() ohne diese Schalter mit einer Semantik, die
(derzeit) der Angabe von
MS_ASYNC entspricht. (Seit Linux 2.6.19 ist
MS_ASYNC de facto ein Leerbefehl, da der Kernel unsaubere Seiten
korrekt verfolgt und wenn nötig aus dem Speicher leert.) Trotz des
Linux-Verhaltens sollten portable, zukunftssichere Anwendungen sicherstellen,
dass sie
MS_SYNC oder
MS_ASYNC in
Schalter angeben.
mmap(2)
B.O. Gallmeister, POSIX.4, O'Reilly, Seiten 128–129 und 389–391.
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze
<
[email protected]> und Chris Leick <
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer