精華區beta Programming 關於我們 聯絡資訊
※ 引述《SwallowMoon.bbs@bbs.ee.ndhu.edu.tw (柳.心戀)》之銘言: > ※ 引述《UNARY.bbs@bbs.cse.ttu.edu.tw (Rootkit Researcher)》之銘言: > > 不過若是在 Win 上的話 > > open() close() read() write() 這些 > > 也就不是標準 system call 了說.. > 的確不是標準的 system call , 可是那應該無所謂 ; > 因為標準的 system call 裡面也有 fread , fwrite 可以使用 ; > 可是其實無所謂 , 因為重點不是在選用讀取檔案的函式上面 ; > 主要的差異是在於使用 二元檔 或 文字檔 的模式開啟的緣故 ; > open 是 O_BINARY 與 O_TEXT , fopen 是 rb 與 rt 的差異 ; > 在二元模式底下 , 換行為 \r \n ; 在文字模式底下 , 換行為 \n ; 嗯..上面敘述沒有錯誤 但我的疑問跟你說的其實是兩回事 另外我也沒說過原發問者的問題在於挑選函式啊 = = ===== open() 在 Windows 下的模擬版本有提供 O_TEXT -> _O_TEXT -> 0x4000 O_BINARY -> _O_BINARY -> 0x8000 前面 godchild 說他都用 open() 然後純文字檔的換行都是 0D 0A 兩 bytes 並沒有特別說明使用了 O_BINARY 但是若是使用 Windows 上的模擬版本,預設可是採用 O_TEXT 的效果喔 換行的 0D 0A 之後在用 read() 時會被改成 0A 所以這樣並不會讀到 0D 在 Linux 用 open() 可不用管這個,反正文字檔內也只用一個 0A 換行而已 這邊就出現模擬版本的差異了 當然如果他是在 Linux 去讀取先前在 Windows 編輯存檔的文字檔 那就沒有上述問題 只是光看前一篇是看不出來的 我只是從他說 0D 0A 猜他可能是在 Windows 用模擬版本而已.. -- , 秘密情人 (bbs.cse.ttu.edu.tw) ~\ Post From: 61-70-137-117.adsl.static.giga.net.tw