2014-12-07 82 views
0

我正在創建一個調度軟件,我有數百個文本文件中描述的數據集。 我正在使用dirent.h來讀取文本文件,爲每個文件我做一個時間表,並附加結果到另一個文本文件(如cpu時間,數據集名稱,遲到...),這個文件是對所有時間表通用。Linux會自動關閉文件嗎?

我打開/關閉結果文件一次(循環前爲fopen(),循環後爲fclose(),所有時間表完成後)。

我在Windows 7上沒有問題,但在Linux下,由於某種超時,文件似乎被系統關閉,我只安排了9-10個數據集(約2小時)和因爲它不能寫入結果文件:/

有沒有人已經有這種麻煩,並找到了解決方案?

+0

「*它不能寫入結果文件*」給出哪個錯誤(errno的值)? – alk 2014-12-07 13:12:42

+0

你爲什麼認爲該文件已關閉?順便說一句,當你使用'fopen'時,你應該使用'fclose'而不是'close',如果它編譯完成然後打開編譯器警告它不會編譯它。 – 2014-12-07 13:12:55

+0

對不起,我已經錯過了「f」,它當然是fclose :) – DanIdle 2014-12-07 13:30:33

回答

1

Linux不會自動關閉文件。你的代碼有問題。

嘗試使用「strace」運行程序並確定close()發生的位置。

strace -f -o 1.txt ./my_best_app_ever 

打開1.txt文件使用文本編輯器(或less),看看您的應用程序在做什麼。

+0

我會盡快謝謝,但我不明白爲什麼在Windows下沒有問題...我只是使用數組和dirent來讀取dirs,fopen()/ fclose()來讀取數據集並寫入結果文件。它只是標準的C代碼,沒有什麼特別的:/ – DanIdle 2014-12-07 13:35:24

+0

它實際上是用strace運行:)讓我們看看2小時內會發生什麼 – DanIdle 2014-12-07 14:27:17

+0

請記住,strace可能會降低應用程序的性能,所以如果你正在做一些多線程,而你錯過了某個鎖或某些東西,事情可能會錯過。我認爲這對你的情況無效 - 但其他人可能會閱讀並學習。 – elcuco 2014-12-07 15:24:33