ifstream因为我的文件描述符不足而失败

时间:2014-04-09 17:54:22

标签: c++ file-io memory-leaks fstream

我在OSX 10.9.2上使用Xcode5 / clang。 我的计划开始采取行动

std::ifstream file(path);
if (!file.is_open())
    throw std::runtime_error("somethings wrong");
几百(或几千?)打开和关闭文件后的

。 当发生这种情况时,我无法打开任何文件,无论是使用fstream还是使用fopen(),这让我觉得我用完了文件描述符。 根据ifstream上的文档,当fstream对象被销毁时,文件将被关闭。我的所有fstream对象都存在于堆栈中,我从来没有用new分配任何对象,所以如果我的堆栈被正确清理,我不必调用fstream :: close(),因为当对象超出范围时,文件已关闭。

但显然,我仍在某处泄露文件描述符。

问题: 1.即使ifsteam对象按计划清理,我是否可以用完文件描述符?比如,文件描述符可以在它们关闭后重新使用,还是一旦使用和关闭它们就会永远消失? 2.有没有办法可以泄漏fstream对象,让它们打开,即使它们都在我的堆栈上?

1 个答案:

答案 0 :(得分:0)

没关系,我发现了我的问题。

我根本没有泄漏fstream对象,但是我一直在疯狂地泄漏sqlite句柄。 我通过仔细使用

找到了它
lsof -p my_processes_pid | wc

lsof是一个非常有用的命令!