INFO: FILE_FLAG_WRITE_THROUGH dan FILE_FLAG_NO_BUFFERING

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 99794 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

RINGKASAN

Bendera FILE_FLAG_WRITE_THROUGH untuk CreateFile() menyebabkan menulis yang dibuat untuk yang menangani akan ditulis langsung ke file tanpa menjadi buffered. The data cache (disimpan di disk cache); Namun, itu masih ditulis langsung ke file. Metode ini memungkinkan operasi baca berdasarkan data tersebut untuk memenuhi permintaan baca dari data cache (jika masih ada), agak daripada harus melakukan file membaca untuk mendapatkan data. Panggilan menulis tidak kembali sampai data ditulis ke file. Hal ini berlaku untuk menulis jauh juga--redirector jaringan melewati bendera FILE_FLAG_WRITE_THROUGH server sehingga server tahu tidak untuk memenuhi permintaan menulis sampai data yang ditulis ke file.

FILE_FLAG_NO_BUFFERING mengambil konsep ini satu langkah lebih jauh dan menghilangkan semua file baca-depan buffer dan disk cache, sehingga membaca semua dijamin untuk datang dari file dan bukan dari sistem penyangga atau disk cache. Bila menggunakan FILE_FLAG_NO_BUFFERING, disk dibaca dan menulis harus dilakukan pada batas-batas sektor, dan penyangga alamat harus selaras pada batas-batas sektor disk di memori.

Pembatasan ini diperlukan karena buffer yang Anda lulus untuk membaca atau menulis API digunakan secara langsung untuk I/O di tingkat perangkat; pada saat itu tingkat, buffer alamat dan sektor ukuran harus memenuhi setiap prosesor dan media kesejajaran pembatasan perangkat keras yang sedang Anda jalankan.

INFORMASI LEBIH LANJUT

Windows 95 CDFS (CD-ROM File System) tidak mendukung FILE_FLAG_NO_BUFFERING bendera untuk CreateFile(). Sementara Windows 95 FSD, seperti sebagai VFAT, dapat menerapkannya, FILE_FLAG_NO_BUFFERING bukanlah tanda yang diperlukan untuk sistem berkas pengandar dan tidak didukung oleh CDFS.

Fragmen kode ini menunjukkan bagaimana untuk menyelaraskan sektor data dalam buffer dan lulus untuk 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);

				
Pointer p sektor-blok dan poin dalam buffer.

Jika Anda memiliki sebuah situasi di mana Anda ingin membersihkan semua file pada saat ini pengandar logis, ini dapat dilakukan dengan:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
Metode ini menyebabkan semua buffered menulis data untuk semua file pada C: partisi untuk memerah dan ditulis ke disk. Perhatikan bahwa setiap buffer dilakukan oleh apa pun selain sistem tidak terpengaruh oleh flush ini; setiap file mungkin buffer yang C Run-time melakukan di file dibuka dengan c Run-time rutinitas tidak terpengaruh.

Ketika membuka file jarak jauh melalui jaringan, server selalu cache dan mengabaikan bendera buffer tidak ditentukan oleh klien. Ini adalah oleh desain. Redirector dan server tidak benar menerapkan semantik penuh dari FILE_FLAG_NO_BUFFERING melalui jaringan. Secara khusus, persyaratan untuk berukuran sektor, sektor-blok I/O tidak bisa bertemu. Oleh karena itu, ketika Win32 - aplikasi berbasis meminta FILE_FLAG_NO_BUFFERING, pengalih arah dan server memperlakukan ini sebagai permintaan untuk FILE_FLAG_WRITE_THROUGH. File tersebut tidak cache pada klien, menulis pergi langsung ke server dan untuk disk server, dan ukuran baca/tulis pada jaringan adalah persis apa Aplikasi meminta. Namun, file cache pada server.

Tidak caching klien dapat memiliki efek yang berbeda, tergantung pada jenis i/o:. Anda menghilangkan cache hit atau membaca ke depan, tetapi Anda juga dapat mengurangi ukuran mengirimkan dan menerima. Secara umum, untuk berurutan i/O, itu adalah ide bagus untuk men-cache pada klien. Untuk kecil, acak akses I/O, hal ini sering terbaik tidak ke cache.

Properti

ID Artikel: 99794 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Win32 Application Programming Interface, ketika digunakan dengan:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Kata kunci: 
kbapi kbfileio kbinfo kbkernbase kbmt KB99794 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:99794

Berikan Masukan

 

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