ifstream 失败,因为我的文件描述符用完了
ifstream fails because I'm running out of file descriptors
我在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对象,让它们保持打开状态,即使它们都在我的堆栈中?
尽管如此,我还是发现了我的问题。
我根本没有泄露fstream对象,但我一直在疯狂地泄露sqlite句柄。我是通过仔细使用找到的
lsof -p my_processes_pid | wc
lsof是一个非常有用的命令!
相关文章:
- 使用VerQueryValue检索应用程序的文件描述
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- I2C 文件描述符上的 I2C 总线可写/可读标志
- 许多文件描述符在调用sys_clone时
- AMQP-CPP >处理程序中的错误文件描述符
- 如何使用 WINAPI 和 C++ 提取可执行文件的文件描述?
- 正在等待在非阻塞文件描述符上长时间运行ioctl
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 如何强制文件描述符缓冲我的输出
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- 哪个更适合从C++写入敏感的日志文件,在文件描述符上写()或文件上的fprintf()?
- 将 select() 与非基于文件描述符的输入一起使用
- accept(..) 似乎正在修改我给它的文件描述符参数
- 使用 Select 多路复用未命名的管道和其他文件描述符
- 提升 ASIO 绑定:错误的文件描述符
- 使用文件描述符移动对象
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- read() 上的不同行为取决于写入不可写内存时表示文件、匿名管道或套接字的文件描述符
- 我是否需要在使用它的 R 包的描述文件中导入 RccpEigen,或者"LinkingTo"足够?
- GCC链接器描述文件强制符号位于特定地址