INFO: FILE_FLAG_WRITE_THROUGH dan FILE_FLAG_NO_BUFFERING

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
RINGKASAN
Bendera FILE_FLAG_WRITE_THROUGH untuk CreateFile() menyebabkan menulis yang dibuat untukyang menangani akan ditulis langsung ke file tanpa menjadi buffered. Thedata cache (disimpan di disk cache); Namun, itu masih ditulislangsung ke file. Metode ini memungkinkan operasi baca berdasarkan data tersebut untukmemenuhi permintaan baca dari data cache (jika masih ada), agakdaripada harus melakukan file membaca untuk mendapatkan data. Panggilan menulis tidakkembali sampai data ditulis ke file. Hal ini berlaku untuk menulis jauhjuga--redirector jaringan melewati bendera FILE_FLAG_WRITE_THROUGHserver sehingga server tahu tidak untuk memenuhi permintaan menulis sampaidata yang ditulis ke file.

FILE_FLAG_NO_BUFFERING mengambil konsep ini satu langkah lebih jauh danmenghilangkan semua file baca-depan buffer dan disk cache, sehinggamembaca semua dijamin untuk datang dari file dan bukan dari sistempenyangga atau disk cache. Bila menggunakan FILE_FLAG_NO_BUFFERING, disk dibaca danmenulis harus dilakukan pada batas-batas sektor, dan penyangga alamat harusselaras pada batas-batas sektor disk di memori.

Pembatasan ini diperlukan karena buffer yang Anda lulus untukmembaca atau menulis API digunakan secara langsung untuk I/O di tingkat perangkat; pada saat itutingkat, buffer alamat dan sektor ukuran harus memenuhi setiap prosesordan media kesejajaran pembatasan perangkat keras yang sedang Anda jalankan.
INFORMASI LEBIH LANJUT
Windows 95 CDFS (CD-ROM File System) tidak mendukungFILE_FLAG_NO_BUFFERING bendera untuk CreateFile(). Sementara Windows 95 FSD, sepertisebagai VFAT, dapat menerapkannya, FILE_FLAG_NO_BUFFERING bukanlah tanda yang diperlukanuntuk sistem berkas pengandar dan tidak didukung oleh CDFS.

Fragmen kode ini menunjukkan bagaimana untuk menyelaraskan sektor data dalam buffer danlulus 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 padasaat 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 bufferdilakukan oleh apa pun selain sistem tidak terpengaruh oleh flush ini; setiapfile mungkin buffer yang C Run-time melakukan di file dibuka dengan cRun-time rutinitas tidak terpengaruh.

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

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

Peringatan: Artikel ini telah diterjemahkan secara otomatis

속성

문서 ID: 99794 - 마지막 검토: 09/14/2011 09:41:00 - 수정: 2.0

Microsoft Win32 Application Programming Interface

  • kbapi kbfileio kbinfo kbkernbase kbmt KB99794 KbMtid
피드백