MSYNC 2 C -Funktion

MSYNC 2 C -Funktion
Haben Sie jemals von einer Funktion gehört, die den Speicher eines Systems unter Linux verwendet und verwaltet? Die MSYNC () -Funktion ist eine von ihnen. Die Methode synchronisiert den Inhalt der Datei mit dem aktuellen Inhalt des Gebiets. Unter den Linux -Benutzern war es weithin bekannt, den Speicher mit dem physischen Speicher eines Systems zu synchronisieren. In diesem Artikel werden wir seine Syntax und Verwendung erklären. Dafür werden wir jedes seiner Argumente einzeln durchlaufen.

Syntax:

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

ADDR: Der Beginn der Adressen, die Sie als Bereich synchronisieren möchten.

Len: Die Anzahl der in Bytes ausgedrückten Länge der Standorte.

Erläuterung:

Innerhalb dieser vollständigen Seiten, die einen Teil des Adressraums des Prozesses umfassen, beginnend am Adress -ADR und für Längenbytes, muss die msync () -Methode alle aktualisierten Informationen in anhaltende Speicherbereiche schreiben. MSYNC () sollte keinen Einfluss haben, wenn kein solcher Speicher vorhanden ist. Die MSYNC () -Methode entfernen dann die gespeicherten Informationssicherungen bei Bedarf. ADDR muss ein Vielfaches der Anzahl der Seiten sein, die von der Funktion sysconf () bereitgestellt werden, damit die Implementierung funktioniert.

Die MSYNC (*) -Methode muss sicherstellen. Die Implementierung kann optional zusätzliche Dateimerkmale schreiben, obwohl dies nicht definiert ist. Alle aktualisierten Daten dürfen nicht an das Kernobjekt übertragen oder bestimmten anderen Vorgängen frei zur Verfügung gestellt werden, wenn die MSYNC () -Methode auf MAP_Private -Übersetzungen durchgeführt wird. Es ist nicht bekannt, wo die Informationen in MAP_Private -Übersetzungen dauerhaft gespeichert sind. [SHM | TYM] [Auswahlstart] MSYNC () gibt nicht an, ob es die gemeinsam genutzten Speicherobjekte oder die typisierten Speicherobjekte betrifft.

Ende der Option: Wenn eine MAP -Anforderung zum Erstellen der Übersetzung nicht verwendet wurde, ist die Funktionalität dieser Methode nicht definiert.

Flag -Optionen für MSYNC () verfügbar

Der Optionsparameter besteht aus dem bitgewiehenen oder von mehreren Flags, die im Folgenden aufgeführt sind, die in der Header-Datei „SYS/MMAN angegeben sind.H":

  • Ms_async: Gleichzeitiges Schreiben durchführen
  • Ms_invalidat: Ungenaue Zuordnungen
  • MS_SYNC: Gleichzeitiges Schreiben durchführen
  • Ms_cache_only: Da QNX Neutrino derzeit die POSIX-Kompatibilität für Speichervermittlungsdokumente unterstützt, führt MSYNC () den gewünschten Zweck zum Schreiben von Änderungen im übersetzten Speicher in die tatsächliche Datei durch. Nur MS -Cache (QNX Neutrino Addition; QNX Neutrino Core OS 6.3.2 oder höher). Wenn Sie die Addition des QNX -Neutrino zum POSIX -Standardverhalten bevorzugen, wenden Sie dieses Bit mit, um die Methode zum Spülen oder Sättigung des Datencache (über die MS ASYNC, MS Sync oder MS Ungitalidate Flags) zu wenden oder zu sättigen).
  • Wenn Sie den Code dynamisch ändern, verwenden.
  • Arbeiten Sie nur auf gereinigten Seiten mit der QNX Neutrino -Erweiterung nur MS_CLEAN (Version 7.0 oder später).

Vor der Anfrage waren alle Schreib -Links zum Systemspeicher zu den folgenden Leseprozessen im Dokument zugegriffen. Es ist unklar, ob die Lesezeiger auf den Speicherbereich auf die Änderungen an demselben Bereich des Dokuments zugreifen können, der bereits vor der Anfrage vorgenommen wurde. Wenn die unveränderten Seiten innerhalb des jeweiligen Bereichs zusätzlich in die grundlegende Hardware geschrieben werden, wird dies nicht erwähnt. Wenn alle Schreibprozesse geplant sind, kann die Methode sofort reagieren, wenn das Flag ms_async ist. Wenn die Flags MS_SYNC sind, kehrt die Methode irgendwie nicht zurück, es sei denn, alle Schreibprozesse sind abgeschlossen.

Durch die Synchronisierung der Daten der Speicherregion mit den vorhandenen gespeicherten Informationen führt MS_INVALIDATE sie zusammen. Aufeinanderfolgende Lesezugriffe auf den verlinkten Speicherbereich finden Sie alle Schreibvorgänge in den übersetzten Bereich des Dokuments, der bereits vor der Anfrage gemacht wurde. Es ist unklar, ob die Lesezeiger auf die Speicherbereiche, die in denselben Bereich des Dokuments übersetzt wurden, unter Verwendung des MAP_SHARDE, bevor Sie eine Funktion verwenden, den Bereich sehen können. Die ST_CTIME- und ST_MTIMT -Spalten der Datei werden zur Aktualisierung gekennzeichnet, wenn die Verwendung der Funktion mSYNC () in den im Verzeichnis ausgeführten Schreibvorgängen führt.

Rückgabewert:

  • MSYNC () -Funktion ergibt 0, wenn sie abgeschlossen ist.
  • MSYNC () -Funktion gibt -1 aus und weist einem der folgenden Fehlerparameter ein Errno zu, wenn es fehlschlägt.

Anwendungsnutzung:

Die MSYNC () -Methode muss bei allen Varianten nicht zugänglich sein, da sie nur dann zulässig ist, wenn die Speicherdokumente und die koordinierten eingehenden und ausgehenden Optionen bereitgestellt werden. Anwendungen, die ein Speicherobjekt benötigen, um sich in einer definierten Position zu befinden, wie z. B. solche, die Transaktionsanlagen bereitstellen. Die Seiten können während der Routine -Systemaktivität auf Disc übertragen werden.

Es gibt keine Gewissheit, dass MSYNC () der einzige Faktor ist, der beeinflusst, ob die Seiten auf Disc übertragen werden oder nicht. Die MSYNC () -Methode sendet die Daten aus einem zugeordneten Bereich an den anhaltenden Speicher der Basisentität. Die Datenintegrität des Dokuments wird durch die Anfrage an MSYNC () sichergestellt. Wenn irgendwie das Flag MS_invalidat bereitgestellt wurde, können gespeicherte Daten abgelaufen sein, wenn die Daten eingegeben werden. Auf den Plattformen, die keine Integrität von Lese-/Schreiben bieten, ist dies hilfreich.

Beispiel:

Wir haben eine neue C -Datei mit der VIM -Anweisung auf der Shell erstellt. Es wird im Projekt1 -Ordner unseres Kali Linux -Systems gemäß der Ausgabe der Liste „LS“ im folgenden Bild erstellt. I.e. „MySync.C".

Um diese Datei zu öffnen, verwenden wir den VIM -Editor gemäß den folgenden Anweisungen:

Die leere Datei wird innerhalb des VIM -Editors unseres Systems geöffnet. Wir fügen zuerst die erforderlichen Header in dieser Codedatei hinzu. Der Stdio.H, Unistd.H und String.H werden verwendet, um den Standardeingang und die Ausgabe zu erhalten. Während die Verwendung von „sys/mman.H ”und fcntl.H werden verwendet, um die Funktion und die Dateien msync () im Code zu verwenden. Die Funktion main () initialisiert den Wert des Dateideskriptors auf -1 und erhält die Seitengröße mit der Funktion getPageSize (). Wir öffnen die „Newfile.TXT ”-Datei im Lese- und Schreibmodus. Wenn es keine Datei mit diesem Namen gibt, erstellt die Option "o_create" eine neue.

Der zurückgegebene Wert wird im Dateideskriptor gespeichert, und in der Anweisung "if" wird er festgestellt, ob der Wert kleiner als 0 beträgt oder nicht. In diesem Fall wird drucken, dass die "Dateiöffnung fehlgeschlagen ist". Der Zeiger MAP_ADDRESS wird verwendet, um die Adresse einer Datei zuzuordnen. Wenn sie fehlschlägt. Die Funktion von Strcpy () soll einen String in eine MAP_ADdress-Variable kopieren, und die Anweisung "If-ELSE" verwendet die Funktion msync (), um den zugeordneten Speicher mit der Datei zu synchronisieren und die jeweilige Ausgabe anzuzeigen, i.e. gescheitert oder erfolgreich.

Wir haben diese C -Datei mit dem GCC -Compiler zusammengestellt und ihre Objektdatei erstellt. Dann haben wir seine Objektdatei ausgeführt und die Nachricht erhalten, dass der zugeordnete Speicher erfolgreich mit der Datei synchronisiert wurde.

Abschluss

Hier geht es um die Verwendung der MSYNC () 2 -Funktion von C in unserem System. Wir haben seine Syntax zusammen mit seinem Parameter getrennt besprochen. Wir haben auch die darin verwendeten Optionen und die Fehler besprochen, die wir aus dem Fehler erhalten können. Wir haben ein detailliertes Beispiel hinzugefügt, um die Verwendung in der C -Programmiersprache zu erklären.