天天看點

用VC的read函數讀取檔案,讀取的資料比實際檔案大小要少的問題

今天用vc下編譯libevent的http-server示例,卻發現用浏覽器怎麼也打不開網頁,跟蹤下來,發現運作到 evbuffer_add_file

函數就阻塞了

起初懷疑是 libevent的evbuffer_add_file函數實作有bug,是以自己寫了個簡單的實作來替換

現在可以打開網頁了,但檔案網頁顯示不完整,原來是read函數的問題,在這裡read到的長度要比檔案大小要小,即使反複read也不成功

在網上百度了windows下read的問題找到了答案,原來windows下的_open函數預設不是按二進制格式打開檔案的,需要在open時增加o_binary标志

找到問題所在就好辦了,修改http-server.cpp檔案中open函數的參數後,一切正常

附一個windows下使用open/read函數讀取檔案的示例,以備後用