INFORMACE: FILE_FLAG_WRITE_THROUGH a FILE_FLAG_NO_BUFFERING

Překlady článku Překlady článku
ID článku: 99794 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Příznak FILE_FLAG_WRITE_THROUGH pro CreateFile() způsobí, že všechny zápisy provedené popisovače zápis přímo do souboru bez právě ukládán do vyrovnávací paměti. Data jsou uloženy v mezipaměti (uložené v mezipaměti disku); však je stále zapsat přímo do souboru. Tato metoda umožňuje operace čtení na tato data ke zpracování čtení požadavku z dat uložených v mezipaměti (Pokud je stále zobrazena), spíše než s provést souboru přečíst získat data. Volání zápisu nevrací, dokud budou data zapsána do souboru. To se vztahuje na vzdálených zápisů do – síťový přesměrovač předá příznak FILE_FLAG_WRITE_THROUGH serveru tak, aby server ví, nikoli k uspokojení požadavku zápisu, dokud budou data zapsána do souboru.

FILE_FLAG_NO_BUFFERING dále přebírá tento pojem jeden krok a eliminuje všechny ukládání do vyrovnávací paměti čtení napřed souborů a ukládání do diskové mezipaměti také tak, aby všechny operace čtení je zaručeno, pocházet ze souboru a nikoliv z vyrovnávací paměti systému ani diskové mezipaměti. Používáte-li FILE_FLAG_NO_BUFFERING, přečte disku a zápisy musí být provedeno na hranice odvětví a vyrovnávací paměti adresy musí být sladěna hranice sektoru disku do paměti.

Tato omezení jsou nezbytné, a proto vyrovnávací paměti, které předat čtení nebo zápis rozhraní API je přímo na úrovni zařízení I/O; na dané úrovni, vaše vyrovnávací paměti adresy a odvětví velikostí musí splňovat omezení procesoru a média zarovnání hardwaru, který používáte.

Další informace

Windows 95 CDFS (CD-ROM File System) nepodporuje příznak FILE_FLAG_NO_BUFFERING pro CreateFile(). Zatímco FSD systému Windows 95, jako například VFAT, může jeho implementaci, FILE_FLAG_NO_BUFFERING není požadováno příznak pro ovladače systému souborů a není podporován CDFS.

Tento fragment kódu demonstruje odvětví zarovnání dat do vyrovnávací paměti a jejich předávání 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);

				
ukazatel p je zarovnán na odvětví a míst v rámci vyrovnávací paměti.

Máte-li situace, které chcete vyprázdnit všechny otevřené soubory na aktuální logické jednotce, to lze provést:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
tato metoda způsobí, že všechna data ve vyrovnávací paměti zápis pro všechny otevřené soubory v oddílu C: vyprázdněna a zapsána na disk. Všimněte si, že všechny vyrovnávací paměť provádí nic jiných než v systému není ovlivněn tento vyprázdnění; všechny možné soubory ukládání do vyrovnávací paměti, že C Runtime dělá soubory otevřené pomocí C Runtime rutiny nedotčena.

Při otevírání vzdáleného souboru v síti, server vždy ukládá do mezipaměti a ignoruje žádné vyrovnávací paměti příznak určený klientem. Toto chování je záměrné. Přesměrovač a server správně nemůže implementovat úplné sémantiku FILE_FLAG_NO_BUFFERING v síti. Zejména nelze splnit požadavek vstupně-výstupní velikost sektoru, zarovnané odvětví. Proto při aplikace Win32-založena požaduje FILE_FLAG_NO_BUFFERING, přesměrovač a server považovat tento jako požadavek pro FILE_FLAG_WRITE_THROUGH. Soubor není uložena v mezipaměti na straně klienta, zapíše přejděte přímo k serveru a na disk na serveru a velikosti ke čtení a zápisu v síti jsou přesně aplikace požádá o. Však soubor je uložen do mezipaměti na serveru.

Není ukládání do mezipaměti klienta mohou mít různé vliv, v závislosti na typu I/O. Můžete vyloučit přístupů do mezipaměti nebo čtení předem, ale také může zmenšit velikost odesílá a přijímá. Obecně pro sekvenční I/O, je vhodné do mezipaměti na straně klienta. Malé, náhodný přístup I/O, je často nejlepší nejsou do mezipaměti.

Vlastnosti

ID článku: 99794 - Poslední aktualizace: 21. listopadu 2006 - Revize: 4.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Win32 Application Programming Interface na těchto platformách
    • 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
Klíčová slova: 
kbmt kbapi kbfileio kbinfo kbkernbase KB99794 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:99794

Dejte nám zpětnou vazbu

 

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