我開發一個備份工具,我得到的錯誤:打開了太多文件系統,而不是真正打開任何文件
Too many open files in system
它運行一段時間後。該錯誤由stat()
返回。因爲我實際上並沒有打開任何文件(fopen()
),我的問題是如果下列任何函數(我正在使用)都佔用一個文件描述符,並且如果是的話,我該怎麼做才能釋放它?
getwd()
chdir()
mkdir()
stat()
time()
我開發一個備份工具,我得到的錯誤:打開了太多文件系統,而不是真正打開任何文件
Too many open files in system
它運行一段時間後。該錯誤由stat()
返回。因爲我實際上並沒有打開任何文件(fopen()
),我的問題是如果下列任何函數(我正在使用)都佔用一個文件描述符,並且如果是的話,我該怎麼做才能釋放它?
getwd()
chdir()
mkdir()
stat()
time()
你列出的功能是安全的;他們都沒有回報你可以「關閉」的任何東西。
要了解更多信息,請運行命令lsof -p
+備份進程的PID。這會給你一個進程打開的文件列表,這反過來會讓你知道發生了什麼。
參見:lsof
manual page。
謝謝,今天我會試試這個,並且返回結果 –
+1對於lsof -p! –
你的程序是否使用opendir()? – wildplasser
不,只是我用'system()'列出的函數來啓動'cp'命令。 –
什麼是「啓動cp命令」?如果你通過system()或者popen()調用cp,那麼你也會花費幾個文件描述符。 – wildplasser