fopen中调用_getstream返回NULL导致文件打开失败,ofstream的failbit被设置
来源:互联网 发布:仿真软件的作用 编辑:程序博客网 时间:2024/05/04 02:09
问题描述:在导出一个package的时候,调用了一个函数去生出xml文件,在最后用ofstream去保存xml文件的时候,总是失败。然而相同的代码去导出别的package,一切正常。唯一的区别是正常的package较小。
问题分析:在trace代码的时候发现,导致打开文件失败的原因是fopen中调用_getstream返回了NULL,再跟踪到_getstream函数发现,这个函数主要的功能是:试图找到一个没有被使用的stream去打开文件,如果达到512个并且没有找到可用的stream,就会返回NULL。
问题解决:一开始以为是handle使用的太多,导致没有可用的handle,使用task manager勾选上handle去查看,发现并没有想象中的那么多。handle的嫌疑排除。
上网google了很久,也没有准确的答案,没办法,只好把目光重新放回到fopen函数上,在函数入口设置断点,看看都是哪些函数调用了fopen。结果就发现在导出package的时候,有一个计算函数被多次调用,而这个函数被别人加了log,logfile被多次打开,但没有关闭。注掉log代码,测试,一切ok。较小的package的计算较少,log被打开的次数较少,可能没有达到512上限。
最终确定,问题就出在打开的文件太多,而又没有及时关闭。导致stream都被占用了。
- fopen中调用_getstream返回NULL导致文件打开失败,ofstream的failbit被设置
- fopen打开文件失败
- vc中ifstream ofstream打开txt文件失败
- fopen打开图片文件失败
- fopen打开文件失败的奇怪错误,errno = EMFILE
- fopen打开文件mode设置缺少‘b’引发的血案
- 在fragment中设置bar,getSupportActionbar()返回null,添加up action失败的原因。
- 文件的打开 (fopen()函数)
- 文件的打开(fopen函数)
- 文件的打开(fopen函数)
- 文件的打开(fopen函数)
- 有时候用ifstream或ofstream打开带有中文路径的文件会失败。 解决办法
- ifstream或ofstream打开带有中文路径的文件失败解决方法
- fopen打开失败
- C++的ofstream的文件打开方式
- .oracle文件缺失导致打开失败的解决方法
- Linux目录权限导致进程打开文件失败的问题
- ifstream & ofstream 打开中文路径失败的解决方案
- 本地连接属性中的“高级”选项卡不见了(本地连接无高级选项)
- Android错误-error:Foundtext""whereitemtagisexpected
- 剖析system()函数
- Eclipse搭建Struts2
- xen安装domU
- fopen中调用_getstream返回NULL导致文件打开失败,ofstream的failbit被设置
- MySQL Innodb独立表空间的配置
- 键盘上的标点符号的中英文名称对照表
- rtsp
- 第十一章 Hibernate的查询 HQL面向对象的查询语言
- Windows下DOS命令大全(经典收藏)
- android的短信发送
- WireShark 中为什么会出现 Tcp Checksum Offload?
- Android 4.2.2 API 17 的一些变动总结