※ 引述《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 ◆