我想知道是否有办法从当前进程访问所有打开目录的列表?我有一个递归打开许多目录的函数,但一旦出错就退出程序。当然,我想在调用exit()之前关闭所有目录,而不必跟踪我打开的所有内容。这甚至可能吗?
谢谢!
答案 0 :(得分:1)
我有一个递归打开许多目录的函数,但是一旦出错就退出程序。 当然,我想在调用exit()之前关闭所有目录,而不必跟踪我打开的所有内容。
我认为你的做法是错误的。如果不对它们进行处理,打开目录有什么意义呢?
只要您需要,您应该保留对已打开目录的引用,并尽快将其丢弃。
请记住,通常情况下,打开文件描述符的名称是有限的,例如。 G。到1024。
答案 1 :(得分:0)
您不需要这样做,因为exit()
将(最终)退出进程,这将关闭所有打开的文件描述符,无论是目录还是真实文件。
但是,您绝对做需要担心valgrind
和朋友报告这一点,因为这意味着fd
正在您的程序中泄露。但解决方案不是寻找开放目录,而只是确保每个opendir
与closedir
匹配。这就是valgrind
促使你做的事情。
答案 2 :(得分:0)
当您exit()
时,文件句柄为close()d
。这对于一次性工具很有用,但从长远来看这不是好的做法。
你应该在你去的时候走回递归,close()ing
。替换,例如:
exit(1);
有:
close(current_fd);
return NULL;
更改您的递归调用:
if (thisfunc(...) == NULL) {
close(current_fd);
return NULL;
}