作者softwind (software everywhere)
看板C_and_CPP
標題[問題] WriteFile() +FILE_FLAG_NO_BUFFERING
時間Thu Dec 16 02:16:15 2010
平台 windows
問題:
WriteFile 使用 FILE_FLAG_NO_BUFFERING flag,
依據MSDN說明 buffer必須對齊 sector size的倍數(512 bytes)
沒有對齊的話 會收到 invalid parameter的error.
經過test WriteFile buffer 長度不是 512的倍數會報錯
(GetLastError() return ERROR_INVALID_PARAMETER )
so 這樣就發生一個很有趣的狀況
我用 no buffer的方式 write file, 可以連續寫一大堆 512bytes倍數的buffer
卻發現最後一哩 寫不進去 (不是512的倍數)
雖然有繞路解法 我可以 先把write file handler關掉
然後再開一次檔 但是不下 no buffer的flag.
把最後一哩 buffer 給 WriteFile
但是 這樣的API的"成對"使用 實在頗怪異...
請問 有版友 有任何方式 可以不要開關檔兩次
就可以用 no buffer的方式寫檔嗎?
Thx~
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.120.67
→ stupid0319:Buffer跟NoBuffer應該在於內核的實作方式不同 12/16 09:58
→ stupid0319:寫檔還是用Buffer就好,想知道差別要看內核的書了 12/16 10:01
→ james732:不知道能不能把最後一段補0湊滿512 真正長度另外存 12/16 10:04
→ softwind:事實上 我是想問說有no buffer的flag, 卻沒有最後一步 12/17 01:54
→ softwind:API可以 call 很怪... 要開兩次檔 讓我很難接受... 12/17 01:54
→ softwind:XD 還有 當然不能補0阿 我試過讀小文字檔 後面補0 結果 12/17 01:55
→ softwind:用筆記本開 後面多一大堆空格 12/17 01:55
→ softwind:說到kernel實做 忘記我有買windows kernel的書了 12/17 02:02
→ softwind:等等 study看看 12/17 02:02