INFO: FILE_FLAG_WRITE_THROUGH und FILE_FLAG_NO_BUFFERING

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 99794 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Zusammenfassung

Das FILE_FLAG_WRITE_THROUGH-Flag für CreateFile() bewirkt, dass alle Schreibvorgänge versucht, das Handle direkt in die Datei geschrieben werden, ohne gepuffert wird. Die Daten werden zwischengespeichert (in den Datenträgercache gespeichert); es wird jedoch weiterhin direkt an die Datei geschrieben. Diese Methode ermöglicht einen Lesevorgang auf, um die Leseanforderung aus den zwischengespeicherten Daten erfüllen (sofern es noch vorhanden ist), statt dazu eine Datei gelesen, um die Daten zu erhalten. Der Schreibzugriff-Aufruf zurück nicht, bis die Daten in die Datei geschrieben werden. Dies gilt für remote schreibt sowie--der Netzwerk-Redirector FILE_FLAG_WRITE_THROUGH-Flag an den Server übergibt, so dass der Server weiß nicht, um die Schreibanforderung zu erfüllen, bis die Daten in die Datei geschrieben werden.

Das FILE_FLAG_NO_BUFFERING dieses Konzept einer Schritt weiter akzeptiert und beseitigt alle Read-ahead-Datei Pufferung und Datenträgerzwischenspeicherung auch so, dass alle Lesevorgänge garantiert, aus der Datei und nicht von einem Systempuffer oder Datenträgercache stammen. Bei der Verwendung von FILE_FLAG_NO_BUFFERING Datenträger liest und schreibt auf Sektor Grenzen ausgeführt werden müssen und Puffer Adressen müssen auf Datenträger Sektor Grenzen im Speicher ausgerichtet werden.

Diese Einschränkungen sind erforderlich, da der Puffer, übergeben Sie das Lesen oder API schreiben direkt für e/A auf der Geräteebene verwendet wird; auf die Ebene, Ihre Puffer Adressen und Sektor Größen Prozessor und Medien Ausrichtung Einschränkungen der Hardware auf laufen erfüllen müssen.

Weitere Informationen

Windows 95 CDFS (CD-Dateisystem) unterstützt nicht das FILE_FLAG_NO_BUFFERING-Flag für CreateFile(). Während einer Windows 95 FSD, z. B. VFAT, kann er implementieren, FILE_FLAG_NO_BUFFERING ein erforderliches Flag für Dateisystem-Treiber ist, und wird von CDFS nicht unterstützt.

Dieses Codefragment veranschaulicht, wie Daten in einem Puffer Sektor ausrichten und übergeben es an CreateFile():
  char buf[2 * SECTOR_SIZE - 1], *p;

  p = (char *) ((DWORD) (buf + SECTOR_SIZE - 1) & ~(SECTOR_SIZE - 1));
  h = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE,
      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL);
  WriteFile(h, p, SECTOR_SIZE, &dwWritten, NULL);

				
ist der Zeiger p Sektor ausgerichtet und zeigt innerhalb des Puffers.

Wenn Sie eine Situation alle geöffnete Dateien auf dem aktuellen logischen Laufwerk geleert werden soll haben, dies kann erfolgen durch:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
diese Methode führt alle gepufferten Schreibdaten für alle geöffneten Dateien auf der Partition C: geleert und auf den Datenträger geschrieben werden. Hinweis, dass Pufferung durchgeführt alles andere als das System durch dieses Leerung; nicht beeinträchtigt wird alle möglichen Pufferung, dass der C Runtime auf mit C Runtime-Routinen geöffneten Dateien durchführt nicht betroffen handelt.

Beim Öffnen einer remote-Datei über das Netzwerk wird der Server immer zwischengespeichert und die keine Pufferung Kennzeichnung, die vom Client angegebene ignoriert. Dieses Verhalten ist beabsichtigt. Der Redirector-Dienst und der Server können nicht ordnungsgemäß die vollständige Semantik FILE_FLAG_NO_BUFFERING über das Netzwerk implementieren. Insbesondere kann nicht die Anforderung für den Sektor Größe, Sektor ausgerichtete e/A erfüllt werden. Daher Wenn Sie eine Win32-basierte Anwendung für FILE_FLAG_NO_BUFFERING gefragt werden, Behandeln der Redirector-Dienst und der Server dies als Anforderung für FILE_FLAG_WRITE_THROUGH. Die Datei wird nicht auf dem Client zwischengespeichert, schreibt gehen direkt an den Server und auf den Datenträger auf dem Server und die Größe der Lese-/Schreibzugriff auf das Netzwerk sind genau, was die Anwendung anfordert. Allerdings ist die Datei auf dem Server zwischengespeichert.

Keine Zwischenspeicherung des Clients kann einen anderen Einfluss, je nach Art der e/A benötigen. Sie Beseitigen der Cachetreffer im Voraus lesen, jedoch können Sie auch die Größe reduzieren sendet und empfängt. Im Allgemeinen ist es für sequenzielle e/A, empfiehlt sich, Cache auf dem Client. Für kleine, zufälligen Zugriff e/A, es ist oft am besten nicht auf Cache.

Eigenschaften

Artikel-ID: 99794 - Geändert am: Dienstag, 21. November 2006 - Version: 4.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Win32 Application Programming Interface, wenn verwendet mit:
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Millennium Edition
    • the operating system: Microsoft Windows XP
Keywords: 
kbmt kbapi kbfileio kbinfo kbkernbase KB99794 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 99794
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com