我想知道是否有一種方法來訪問當前進程中所有打開的目錄列表?我有一個遞歸地打開許多目錄的函數,但一旦出錯,就退出程序。當然,我希望在調用exit()之前關閉所有目錄,而不必跟蹤我打開的所有內容。這甚至有可能嗎?關閉退出打開的目錄()
謝謝!
我想知道是否有一種方法來訪問當前進程中所有打開的目錄列表?我有一個遞歸地打開許多目錄的函數,但一旦出錯,就退出程序。當然,我希望在調用exit()之前關閉所有目錄,而不必跟蹤我打開的所有內容。這甚至有可能嗎?關閉退出打開的目錄()
謝謝!
我有一個函數可以遞歸地打開許多目錄,但一旦出錯就退出程序。 當然,我想在調用exit()之前關閉所有目錄,而不必跟蹤我打開的所有內容。
我覺得你的做法是錯誤的。如果你沒有對它們進行處理,打開目錄有什麼意義?
只要您需要,您應該保留對已打開目錄的引用,並儘快將其丟棄。
請記住,通常,打開的文件描述符的標準是有限的,例如, G。到1024.
您不需要這樣做,因爲exit()
將(最終)退出該進程,該進程將關閉所有打開的文件描述符,無論是用於目錄還是實際文件。
但是,你絕對做必要擔心valgrind
和朋友報告這個,因爲這意味着fd
s的程序中的泄漏。但解決方案不是爲了打開目錄尋找,而是爲了確保每個opendir
都與closedir
相匹配。這就是valgrind
促使你做的事情。
當你exit()
,文件句柄是close()d
。這對於一次性工具很有用,但從長遠來看並不是一個好習慣。
您應該隨時走回去遞歸,close()ing
。替換,例如:
exit(1);
爲:
close(current_fd);
return NULL;
更改遞歸調用爲:
if (thisfunc(...) == NULL) {
close(current_fd);
return NULL;
}
'退出()'將隱式關閉所有的文件描述符。你需要明確關閉它們嗎? –
所以我不應該太在意valgrind關於這個漏洞的報道? – stzzz1
考慮使用[nftw(3)](http://man7.org/linux/man-pages/man3/nftw.3.html) –