小州
2004-09-14 19:38:46 UTC
在我的印像中,每個檔都有BOF和EOF,那
為什麼我用VI或windows下的notepad打了一個文字檔
內容是1234.結果用二進位編輯器去開啟,卻找不到所謂
的EOF和BOF呢?
EOF 只是一種表示,所謂的 End Of File (檔案的結尾),但是事實上檔案為什麼我用VI或windows下的notepad打了一個文字檔
內容是1234.結果用二進位編輯器去開啟,卻找不到所謂
的EOF和BOF呢?
最後結尾並沒有這個字元。
在 c library 呼叫內,像是使用 fgets() 這類呼叫傳回 EOF 表示讀到
檔案的結尾,而這個 EOF 只是一個程式傳回值狀態,告訴您檔案已經讀取
到最後面結束沒有資料了,但這不是表示讀取到任何稱呼為 "EOF" 的結尾
字元。
當然,也許你可能被 dos/windows 對於判斷 plain text file 與 binary file
的差異給弄混了。
dos/windows 對於檔案開檔模式還有分 plain text mode 與 binary mode,
而對於 plain text mode 環境下開啟的檔案,若是讀取遇到 EOF 字元就表示
檔案結尾。不過這個所謂 EOF 字元在 dos/windows 環境表示 ctrl-z 按鍵
輸出字元。
所以您弄混的地方可能是來自於上面所提到的事情,不過在 unix 系統檔案
並沒有特別區分為 plain text mode 或者是 binary mode 這種開檔模式差異,
在使用 fopen() 這類函數呼叫都會是使用 fopen(filename,"r") 而不是使用
fopen(filename,"rb")。
另外,有一個課題是 c 語言環境對於在 plain text mode 開檔模式下處理
"\n" 換行字元在不同平台運作下也有不同的行為,這又是另外一個層面的議題。
我的目地是想要寫支程式去監控另一個程式是否完成工作
假定我的程式是A程式,另一個程式是B程式,
B程式在執行時,會建立一個工作檔,不斷的把內容加入
我的A程式希望能不斷檢查該工作檔,當檢出EOF時,
代表檔案完成了,此時,A程式會回報訊息給我
還是有什麼其它的做法呢?
(b程式是一個類似轉檔的程式,會跑很久,所以我要寫個A來確定他跑完了
然後由A再去Call C程式接手處理該工作檔)
請自己提供內部溝通的協定,b 程式能夠以其他方式告知 a 程式工作假定我的程式是A程式,另一個程式是B程式,
B程式在執行時,會建立一個工作檔,不斷的把內容加入
我的A程式希望能不斷檢查該工作檔,當檢出EOF時,
代表檔案完成了,此時,A程式會回報訊息給我
還是有什麼其它的做法呢?
(b程式是一個類似轉檔的程式,會跑很久,所以我要寫個A來確定他跑完了
然後由A再去Call C程式接手處理該工作檔)
已經完成功能項目。
--
真誠最可貴 用心最踏實
--
[1;32m※ Origin: [33mSayYA 資訊站 [37m<bbs.sayya.org> [m
[1;31m◆ From: [36mkendlee.sayya.org[m