msync(3C) msync(3C)
NAME
msync - Speicher synchronisieren
SYNTAX
#include <sys/mman.h>
int msync(void *addr, sizet len, int flags);
BESCHREIBUNG
Die Funktion msync() schreibt alle veränderten Kopien von Seiten im
Bereich [addr, addr + len) auf deren Speichermedien zurück. msync()
kann Kopien ungültig machen, so daß spätere Zugriffe auf die Seiten
über das Speichermedium möglich sind. Das Speichermedium für einen
veränderten MAPSHARED-Verweis ist die Datei, auf die die Seite abge-
bildet wird; das Speichermedium für einen veränderten MAPPRIVATE-
Verweis ist sein Swap-Bereich.
flags ist ein Bitmuster, das sich aus den folgenden Werten zusammen-
setzt:
MSASYNC Asynchrone Schreibzugriffe durchführen
MSSYNC Synchrone Schreibzugriffe durchführen
MSINVALIDATE Verweise ungültig machen
Ist flags auf MSASYNC oder MSSYNC gesetzt, synchronisiert die Funk-
tion den Inhalt der Datei so, daß er dem aktuellen Inhalt der Spei-
cherregion entspricht.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
msync(3C) msync(3C)
- Alle Schreibzugriffe auf die Speicherregion, die vor dem Aufruf
erfolgt sind, werden durch nachfolgende Leseoperationen auf die
Datei angezeigt.
- Es ist nicht definiert, ob vor dem Aufruf erfolgte Schreibzugriffe
auf denselben Abschnitt der Datei durch Lesezugriffe auf die Spei-
cherregion angezeigt werden.
- Ferner ist nicht definiert, ob ungeänderte Seiten im angegebenen
Bereich auch auf die zugrundeliegenden Hardware geschrieben werden.
Wenn flags auf MSASYNC gesetzt ist, kehrt die Funktion möglicherweise
direkt zurück, sobald alle Schreiboperationen terminiert sind; wenn
flags auf MSSYNC gesetzt ist, kehrt die Funktion erst wieder zurück,
nachdem alle Schreiboperationen ausgeführt wurden.
Wenn flags auf MSINVALIDATE gesetzt ist, synchronisiert die Funktion
den Inhalt der Speicherregion, so daß er mit dem Inhalt der aktuellen
Datei übereinstimmt.
- Alle Schreibzugriffe auf den abgebildeten Abschnitt der Datei, die
vor dem Aufruf erfolgt sind, werden durch nachfolgende Leseopera-
tionen auf die abgebildete Speicherregion angezeigt.
- Es ist nicht definiert, ob vor dem Aufruf durch einen beliebigen
Prozeß erfolgte Schreibzugriffe auf Speicherregionen, die auf den-
selben Abschnitt der Datei mit MAPSHARED abgebildet wurden, durch
Lesezugriffe auf die Speicherregion angezeigt werden.
Wenn durch msync() in die Datei geschrieben wird, werden die Felder
stctime und stmtime der Datei zur Aktualisierung gekennzeichnet.
Die Wirkung von msync(addr, len, flags) ist äquivalent zu:
memcntl(addr, len, MCSYNC, flags, 0, 0)
ERGEBNIS
Nach erfolgreicher Ausführung liefert die Funktion msync() den Wert 0;
tritt ein Fehler auf, wird -1 zurückgegeben und errno zur Anzeige des
Fehlers gesetzt.
FEHLER
Die Funktion msync() schlägt bei folgenden Bedingungen fehl:
EINVAL Das Argument addr ist kein Vielfaches der Seitenlänge, wie
von sysconf() zurückgeliefert.
EIO Beim Lesen vom Dateisystem oder Schreiben auf dieses trat
ein Ein-/Ausgabefehler auf.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
msync(3C) msync(3C)
ENOMEM Einige oder alle Adressen im Bereich [addr, addr + len) sind
für den Adreßbereich des Prozesses ungültig, oder nicht
abgebildete Seiten sind angegeben.
HINWEISE
msync() sollte von Programmen verwendet werden, die voraussetzen, daß
sich ein Speicherobjekt in einem bekannten Zustand befindet, z. B. bei
Transaktionsverarbeitung.
Während der normalen Systemaktivitäten können Seiten auf Platte
geschrieben werden. Daher kann nicht gewährleistet werden, daß nur
durch msync() gesteuert wird, ob Seiten auf Platte geschrieben werden
oder nicht.
SIEHE AUCH
memcntl(2), mmap(2), sysconf(3C).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98