BILGI: FILE_FLAG_WRITE_THROUGH ve FILE_FLAG_NO_BUFFERING

Makale çevirileri Makale çevirileri
Makale numarası: 99794 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

CreateFile() için FILE_FLAG_WRITE_THROUGH bayrak için bir tanıtıcı, arabelleğe olmadan doğrudan dosyasına yazılacak yapılan herhangi bir yazar neden olur. (Disk önbelleğinde depolanan), veri önbellekteyse; ancak, yine de doğrudan dosyasına yazılır. Bu yöntem, bir okuma işlemi (Bu hala varsa), önbelleğe alınmış verileri okuma isteği karşılamak için bu verilerin sağlar, yerine dosya yapmak için verileri almak için okuyun. Verileri bir dosyaya yazılır kadar yazma çağrı döndürmüyor. Bu aynı zamanda uzak yazma için geçerlidir; böylece verileri bir dosyaya yazılır kadar yazma isteğini karşılamak için sunucu bilir ağ yeniden yönlendiricisi FILE_FLAG_WRITE_THROUGH bayrağı sunucuya geçirir.

FILE_FLAG_NO_BUFFERING bu kavramı bir adım daha alır ve böylece tüm okuma için dosya ve olmayan herhangi bir sistem arabellek veya disk önbelleğinin garanti altına alınabileceğine tüm önceden okuma dosya ara belleğe alma ve aynı zamanda disk önbelleğe alma ortadan kaldırır. FILE_FLAG_NO_BUFFERING kullanırken, disk okuma ve yazma kesiminin sınırlarının üzerinde yapılmalıdır ve Arabellek adresi, bellek, disk kesimi sınırları hizalı gerekir.

Okuma için geçmesi veya API yazma arabelleği için doğrudan ı/o <a0>Aygıt</a0> düzeyinde kullanıldığından bu kısıtlamalar gereklidir; Bu düzey, kendi Arabellek adresi ve kesimi boyutları işlemci ve ortam hizalama kısıtlamalar, çalışan donanım yinelenip yinelenmeyeceği.

Daha fazla bilgi

Windows 95 CDFS (CD-ROM'u dosya sistemi) için CreateFile() FILE_FLAG_NO_BUFFERING bayrağını desteklemiyor. VFAT, örneğin, bir Windows 95 FSD uygulayabilir, gerekli bir dosya sistemi sürücülerinin bayrağı FILE_FLAG_NO_BUFFERING değil ve CDFS tarafından desteklenmiyor.

Bu kod parçası arabellekte veri kesimi olarak hizalamak için CreateFile() bu yönteme nasıl gösterir:
  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);

				
p işaretçiyi kesimi hizalanır ve içinde arabelleğin işaret eder.

Geçerli mantıksal sürücüdeki tüm açık dosyaları temizlemesini istediğiniz bir durum varsa, bu yapılabilir:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
bu yöntem, tüm açık dosyaları C: bölümündeki temizlendi ve diske yazılan tüm arabelleğe alınan yazma verileri neden olur. Tüm arabelleği dışındaki bir sistemde bu temizleme tarafından etkilenen bir şey tarafından yapılan herhangi bir olası C çalışma zamanı dosyalarını C çalışma zamanı yordamları ile açılmış yaptığını arabelleğe alma dosyası etkilenmeyen olduğuna dikkat edin.

Ağ üzerinden uzak bir dosyayı açarken sunucu, her zaman önbelleğe alır ve istemci tarafından belirtilen hiçbir arabellek bayrak yok sayar. Bu, tasarım gereğidir. Yeniden yönlendirici ve sunucu düzgün FILE_FLAG_NO_BUFFERING, ağ üzerinden tam semantiği uygulayamıyor. Özellikle, kesim boyutlu, kesimi hizalı bir g/Ç için gereksinimin karşılanması edemiyor. Win32-tabanlı uygulama için FILE_FLAG_NO_BUFFERING sorduğunda, bu nedenle, yeniden yönlendirici ve sunucu bu isteği FILE_FLAG_WRITE_THROUGH için işle. Dosya istemcide önbelleğe yazma sunucuya doğrudan diske sunucuya gidin ve ve ağ üzerinde okuma/yazma boyutlarını tam olarak olan uygulama için sorar. Ancak, dosya, sunucuda önbelleğe alınır.

Istemci önbelleğe alma, g/Ç türüne bağlı olarak farklı bir etkisi olabilir. Önbellek isabet elemek veya önceden okuma, ancak boyutunu da azaltabilirsiniz aktarır ve alır. Genel olarak, sıralı g/Ç için önbellek için istemcideki uyarılmalıdır. En küçük, rasgele erişim için g/Ç, genellikle iyisidir önbelleğine değil.

Özellikler

Makale numarası: 99794 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 4.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Win32 Uygulama Programlama Arabirimi, Ne zaman ne ile kullanilir:
    • 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
Anahtar Kelimeler: 
kbmt kbapi kbfileio kbinfo kbkernbase KB99794 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:99794

Geri Bildirim Ver

 

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