Error

C++博客 首页 新随笔 联系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
(search key: std::fstream句柄泄漏  std::fstream析构是否关闭句柄 )

蔡亮<errorcpp@qq.com> 12:49:19 
std::fstream 析构的时候会关闭文件句柄么?
蔡亮<errorcpp@qq.com> 12:50:34 
  求stl高手指导,,,

我记得是会关闭的,,,
石刚(172106137) 12:51:35 
ifstream?
石刚(172106137) 12:51:44 
ifstream 会
蔡亮<errorcpp@qq.com> 12:52:35 
哦,这我就放心了
石刚(172106137) 12:54:58 
嗯,
石刚(172106137) 12:55:02 
但要注意一点,
石刚(172106137) 12:55:15 
ifstream只关闭你最后一次打开的文件。
蔡亮<errorcpp@qq.com> 12:56:36 
也就是说复用 fstream的时候有可能应为忘记关闭句柄导致泄漏?
石刚(172106137) 12:56:57 

蔡亮<errorcpp@qq.com> 12:57:04 

石刚(172106137) 12:57:19 
它只在析构时关闭,
蔡亮<errorcpp@qq.com> 12:57:41 
 
妹的,以前没注意,,,
石刚(172106137) 12:57:40 
如果你用同一个对象操作一个文件后,不调用close,却再打开另一个文件,
石刚(172106137) 12:57:51 
那个handle就会没人关闭的。
蔡亮<errorcpp@qq.com> 12:58:39 
刚刚用任务管理器看了下,析构的时候确实关闭了,,,

调试的时候跟进去看的太痛苦了,n多层,,,



********************************************************************
在后来的开发过程中我们发现一个问题:
(search key: fopen 最多打开多少句柄  fopen打开文件失败  fopen打开句柄限制)

项目中出现fopen打开文件失败现象,第一反应是文件句柄泄漏,然后查看任务管理器,进程句柄有1400个,以往常的经验。1400即使是泄漏也不会严重到无法打开新的句柄。于是写代码测试验证是不是fopen的问题

使用标准库的 fopen 打开的文件句柄总数是受限制的,经过测试我们发现默认情况下windows平台使用CreateFile至少可以创建3w个以上的文件句柄,而使用标准库的fopen最多则只能创建512个,后来发现标准库对这个确实是有限制的,有一个函数可以设置fopen能打开的句柄个数
    // c标准库对fopen的文件个数有限制默认是512
    ::_setmaxstdio(2048);
linux平台也有相应的限制
********************************************************************
后来在网络上查到的,没有经过实际测试,仅作参考:
(search key: fstream最多打开多少句柄 )
我做过实验,fopen有限制,只能同时打开46,还是47个左右
ofstream
fstream
CreatFile这三种方法没有限制,可以同时打开很多文件(我测试的是打开10w个,再多,我没实验了)
*********************************************************************
posted on 2012-03-07 13:01 Enic 阅读(646) 评论(0)  编辑 收藏 引用 所属分类: stl陷阱与技巧

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理