BEZEICHNUNG

msync - eine Datei mit einem Speicherabbild synchronisieren

BIBLIOTHEK

Standard-C-Bibliothek ( libc, -lc)

ÜBERSICHT

#include <sys/mman.h>
int msync(void Adresse[.Länge], size_t Länge, int Schalter);

BESCHREIBUNG

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).

RÜCKGABEWERT

Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.

FEHLER

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.

STANDARDS

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).)

ANMERKUNGEN

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.

SIEHE AUCH

mmap(2)
B.O. Gallmeister, POSIX.4, O'Reilly, Seiten 128–129 und 389–391.

ÜBERSETZUNG

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

Recommended readings

Pages related to msync you should read also: