2012-05-14 123 views
1

我開發一個備份工具,我得到的錯誤:打開了太多文件系統,而不是真正打開任何文件

Too many open files in system

它運行一段時間後。該錯誤由stat()返回。因爲我實際上並沒有打開任何文件(fopen()),我的問題是如果下列任何函數(我正在使用)都佔用一個文件描述符,並且如果是的話,我該怎麼做才能釋放它?

  • getwd()
  • chdir()
  • mkdir()
  • stat()
  • time()
+1

你的程序是否使用opendir()? – wildplasser

+0

不,只是我用'system()'列出的函數來啓動'cp'命令。 –

+0

什麼是「啓動cp命令」?如果你通過system()或者popen()調用cp,那麼你也會花費幾個文件描述符。 – wildplasser

回答

5

你列出的功能是安全的;他們都沒有回報你可以「關閉」的任何東西。

要了解更多信息,請運行命令lsof -p +備份進程的PID。這會給你一個進程打開的文件列表,這反過來會讓你知道發生了什麼。

參見:lsof manual page

+0

謝謝,今天我會試試這個,並且返回結果 –

+0

+1對於lsof -p! –