Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

msync - Speicher synchronisieren

&pagelevel(4)&pagelevel

Definition

#include <sys/mman.h>

int msync(void *addr, size_t len, int flags);

Beschreibung

Die Funktion msync() schreibt alle veränderten Kopien von Seiten im Bereich [addr, addr + len) auf die zugehörigen Speichermedien zurück oder macht Kopien im Speicher ungültig, so dass bei späteren Zugriffen auf diese Seiten auf das Speichermedium zugegriffen wird. Das Speichermedium für eine veränderte Abbildung vom Typ MAP_SHARED ist die Datei, auf die die Seite abgebildet wird; das Speichermedium für eine veränderte Abbildung vom Typ MAP_PRIVATE ist ihr Paging-Bereich.

flags muss einen der folgenden Werte haben:

MS_ASYNC

MS_SYNC

MS_INVALIDATE

asynchrone Schreibzugriffe durchführen

synchrone Schreibzugriffe durchführen

Abbildungen als ungültig markieren

Wenn MS_ASYNC oder MS_SYNC gesetzt sind, synchronisiert msync() den Dateiinhalt mit dem aktuellen Inhalt des zugeordneten Speicherbereichs: Alle Schreibzugriffe auf den Speicherbereich, die vor dem Aufruf von msync() stattgefunden haben, sind nach msync() bei Lesezugriffen auf die Datei sichtbar. Vor dem Aufruf von msync() ist es dagegen undefiniert, ob Schreibzugriffe auf den entsprechenden Dateiabschnitt bei anschließenden Lesezugriffen sichtbar sind.

Wenn MS_ASYNC gesetzt ist, kehrt msync() zurück, sobald alle Schreiboperationen veranlasst wurden; wird MS_SYNC gesetzt, kehrt msync() erst dann zurück, wenn alle Schreiboperationen durchgeführt wurden.

Wenn MS_INVALIDATE gesetzt ist, synchronisiert msync() den Speicherbereich mit dem aktuellen Inhalt des zugeordneten Dateiabschnitts. Anschließend werden alle Kopien von Daten, die sich in einem Cache-Speicher befinden, als ungültig markiert. Spätere Referenzen auf diese Seiten werden vom System über das zu Grunde liegende Speichermedium bedient. Alle Schreibzugriffe auf den abgebildeten Dateiabschnitt, die vor dem Aufruf von msync() stattgefunden haben, sind bei anschließenden Lesezugriffen auf den zugeordneten Speicherbereich sichtbar. Vor dem Aufruf von msync() ist es dagegen undefiniert, ob Schreibzugriffe auf den entsprechenden Dateiabschnitt bei anschließenden Lesezugriffen sichtbar sind.

Returnwert

0

bei Erfolg.

 

-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

Unter den folgenden Bedingungen schlägt die Funktion msync() fehl und setzt errno auf die folgenden Werte: 

 

EINVAL

addr ist kein Vielfaches der durch sysconf() vorgegebenen Seitengröße.

 

ENOMEM

Adressen im Bereich [addr, addr + len) sind für den Adressbereich des Prozesses ungültig, oder es sind eine oder mehrere Seiten angegeben, welche nicht abgebildet sind.

 

EIO

Beim Lese- oder Schreibzugriff auf die Datei trat ein Ein-Ausgabefehler auf.

Hinweise

msync() sollte verwendet werden, wenn verlangt wird, dass sich ein Speicherobjekt in einem bekannten Zustand befindet, z.B. bei Transaktionsverarbeitung.

Auch im Zuge normaler Systemabläufe können Speicherseiten auf Platte geschrieben werden. Es kann daher nicht garantiert werden, dass nur beim Aufruf von msync() Speicherseiten auf Platte geschrieben werden.

Siehe auch

auch mmap(), sysconf(), sys/mman.h.