Discussion:
請問如何檢視EOF和BOF
(时间太久无法回复)
小州
2004-09-14 19:38:46 UTC
Permalink
在我的印像中,每個檔都有BOF和EOF,那
為什麼我用VI或windows下的notepad打了一個文字檔
內容是1234.結果用二進位編輯器去開啟,卻找不到所謂
的EOF和BOF呢?
EOF 只是一種表示,所謂的 End Of File (檔案的結尾),但是事實上檔案
最後結尾並沒有這個字元。

在 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 程式工作
已經完成功能項目。

--
真誠最可貴 用心最踏實
--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: kendlee.sayya.org
加猴晉冠
2004-09-15 05:39:54 UTC
Permalink
※ 引述《***@kkcity.com.tw ()》之銘言:
: ※ 引述《***@bbs.csie.ncku.edu.tw (穿導合金石)》之銘言:
: > ※ 引述《***@kkcity.com.tw》之銘言:
: > 請問 A 跟 B 都是你寫的程式嗎?
: > 如果是的話,在 A 尾端用 system(你的程式名稱); 函數來呼叫你的 B 程式.
: > (相關的函數還有 exec()..等等系列,自己去找相關資料)
: > 另外 EOF 並不是字元,而是檢查文件結束函數所return的布林值,
: > 你找尋你的文件尾端永遠也找不到.
: /_\ 就是因為B是找人家現成的tool來用,所以才有這個困擾 >"<
: 那個tool又沒有開放源碼,真不知從何改起 :(
: 對了,您提的做法是不是指我先讓A程序常註,由A來CALL B程序執行
: 那這樣的話,倘若B執行完畢則會傳回個TURE回給A是嗎 @_@
: 這樣做好像可以耶,來試試 :P ,但是關於 Timeout 的問題可能又要頭痛了 :P
: 因為B程式跑起來,少則24小時,多則一週來會跑完 XD

看你要不要讓A常駐,隨便你,他有破壞父行程函數,也可以保留父行程函數。

如果你的工作銜接性不是那麼重要,可以 delay 一分鐘甚至更久才跑另一個程式,
你可以寫一個 script 放在 cron,叫 cron 每隔一段時間(例如一分鐘或者五分鐘)
就去檢查系統的 process 看 B (A)程式還有沒有在執行? 已經停止的話,就
呼叫 A (B) 繼續執行,

--
 ◥ ◎ 花栗鼠的小站
◤●◢~~ 〒 telnet://chip.twbbs.org
 ◣╰╮ 》 溫馨‧財經‧浪漫‧新奇
Loading...