2010-09-29 24 views
0

我試圖根據文件內容退出while循環。文件存在並且是空的,或者在程序初始化時被垃圾填充。我在外部修改了這個文件,並希望循環根據文件的修改方式退出。在C中,如何根據文件內容退出循環

目前,我開始幾個線程,打開我正在閱讀的文件。檢查第一個字節。如果它是一個,我退出,否則啓動循環。

當我想退出。我在第一個字節中放置了一個,但是看起來我的文件再也不會被讀取了。

雖然循環語句和變量定義每個環的樣子:

while(strcmp(fileContents, "1\n") != 0){ 

    lengthRead = fread(fileContents, 1, size, isRecording); 
    fseek(isRecording, 0, SEEK_SET); 

我知道有可能是更簡單的方式來退出while循環外,但根據我的項目,我可以的唯一途徑的架構看看如何控制這個就是根據文件內容退出。

+2

共享內存?套接字?檢查第二個文件的存在? – 2010-09-29 18:15:43

+1

這裏有一個可疑的事情:你使用'fread()'從文件中得到一個字節,然後用'strcmp()'比較兩個字節('「1 \ n」')。 – aschepler 2010-09-29 18:19:07

+1

它看起來很可疑,但fread實際上一次讀取1個字節,大小爲字節數。 – pri0ritize 2010-09-29 18:33:15

回答

1

如果您的其他線程正在使用fwrite()寫入文件,請不要忘記調用fflush()將更改實際寫入文件(否則,它們可能會保留緩存在內存中)。

正如Dave Jarvis所提到的,還有很多其他的選擇可以與另一個線程同步。例如,如果您使用pthreads,pthread_cond_signal和pthread_cond_wait。

+0

這不是最簡單的系統解釋,但該文件正在由外部程序修改。基本上只是一個簡單的Python腳本。在調試時,C似乎從不會看到文件中所做的更改。我想知道是否需要在使用fread()重新定義「fileContents」之前打開,讀取並關閉文件。戴夫賈維斯檢查文件的存在的想法是一個好主意,但我會看到,如果這是一個可能的解決方案。 – pri0ritize 2010-09-29 18:34:49

+0

好的,在這種情況下,你不能做pthread事情,但共享內存和套接字選項仍然可行。 – 2010-09-29 18:37:03

+0

+1。同意:不要忘記'fflush()'。 – 2010-09-29 18:42:42