INFO: FILE_FLAG_WRITE_THROUGH en FILE_FLAG_NO_BUFFERING

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 99794 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Samenvatting

De vlag FILE_FLAG_WRITE_THROUGH voor CreateFile () zorgt ervoor dat alle schrijf bewerkingen ter die verwerkt zonder wordt gebufferd rechtstreeks naar het bestand worden geschreven. Het gegevens in cache is (opgeslagen in de schijfcache); echter, het nog steeds is geschreven rechtstreeks naar het bestand. Met deze methode kunt een leesbewerking op gegevens voldoen aan de leesaanvraag van in cache opgeslagen gegevens (als deze nog steeds het geval is), in plaats van dan hoeft te doen een bestand gelezen om de gegevens te verkrijgen. Het gesprek schrijven niet Pas de gegevens worden geschreven naar het bestand terug. Dit geldt voor externe schrijf bewerkingen -ook de vlag FILE_FLAG_WRITE_THROUGH wordt doorgegeven in de netwerkredirector de server zodat de server weet niet te voldoen aan de schrijf aanvraag tot de gegevens worden geschreven naar het bestand.

De FILE_FLAG_NO_BUFFERING heeft dit begrip een stap verder en Elimineert alle vooruit lezen bestand buffer en schijfcaching, zodat alle leesbewerkingen gegarandeerd afkomstig zijn uit het bestand en niet op een ander systeem buffer of schijf-cache. Wanneer u FILE_FLAG_NO_BUFFERING, schijf gelezen en schrijf bewerkingen op de sector grenzen moeten worden uitgevoerd en moeten buffer adressen uitgelijnd op de grenzen van schijf sectoren in het geheugen.

Deze beperkingen zijn nodig omdat de buffer die u doorgeeft aan de Lees- of schrijf dat API gebruikt voor i/O op apparaat niveau. op die niveau, uw buffer adressen en Sectors moeten voldoen aan een willekeurige processor en uitlijning beperkingen van de hardware die u uitvoert op media.

Meer informatie

De Windows 95 CDFS (cd-rom File System) biedt geen ondersteuning voor de FILE_FLAG_NO_BUFFERING-vlag voor CreateFile (). Een Windows 95 FSD, terwijl dergelijke Als VFAT, kunnen implementeren, FILE_FLAG_NO_BUFFERING is niet een vereiste vlag voor bestandssysteem wordt stuur programma's, en niet ondersteund door CDFS.

Dit codefragment laat zien hoe gegevens in een buffer sector uitlijnen en doorgegeven aan 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);

				
De aanwijzer p sector is uitgelijnd en punten binnen de buffer.

Als er een situatie waarin u leegmaken van alle geopende bestanden wilt op de huidige logisch station, dit kan worden gedaan door:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
Deze methode zorgt ervoor dat alle gebufferd schrijven gegevens voor alle geopende bestanden op station c: partitie worden leeggemaakt en naar de schijf geschreven. Houd er rekening mee dat een buffer uitgevoerd door iets anders dan het systeem wordt niet beïnvloed door deze flush; elke mogelijke bestands buffer die aan de c runtime-bestanden doet geopend met c Runtime-routines wordt niet beïnvloed.

Wanneer u een extern bestand opent via het net werk, de server altijd caches en geen buffer vlag door de client is opgegeven, worden genegeerd. Dit is ontwerp. De redirector- en server niet meer correct de volledige sem antiek van implementeren FILE_FLAG_NO_BUFFERING via het net werk. In het bij zonder de behoefte aan sector grootte, sector uitgelijnde i/O kan niet worden voldaan. Dus, wanneer een Win32 - toepassing vraagt om FILE_FLAG_NO_BUFFERING, de redirector en Server beschouwen dit als een verzoek voor FILE_FLAG_WRITE_THROUGH. Het bestand is niet in de cache op de client gaan worden geschreven rechtstreeks naar de server en de schijf de server en de formaten lezen/schrijven in het net werk zijn precies wat de toepassing wordt gevraagd. Het bestand wordt echter opgeslagen op de server.

Een ander effect, afhankelijk van het type kan niet opslaan in cache van de client hebben van i/O. U elimineren treffers in de cache of vooruit te lezen, maar ook kan verminderen de grootte van verzendt en ontvangt. In het algemeen voor sequentiële i/O, is een goed idee om de cache op de client. Voor kleine, random access i/O is het vaak best niet naar de cache.

Eigenschappen

Artikel ID: 99794 - Laatste beoordeling: donderdag 5 juli 2012 - Wijziging: 3.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Win32-API op de volgende platformen
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Trefwoorden: 
kbapi kbfileio kbinfo kbkernbase kbmt KB99794 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende: 99794

Geef ons feedback

 

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