c语言fopen为空指针,【转载++】fopen返回0(空指针NULL)且GetLastError是0

博客讨论了在Windows系统中,由于fopen打开文件句柄未及时关闭导致句柄耗尽的问题。当fopen返回NULL且GetLastError为0或183时,可能是因为句柄限制。建议使用fclose释放句柄,并考虑使用CreateFile代替fopen以避免句柄限制。
摘要由CSDN通过智能技术生成

结论来看,是一个简单又朴素的道理——打开文件句柄用完了得给关上。

表现在现象上却是着实让人费解,以至于有人还怀疑起了微软的Winodws系统来了,可笑至极。

还是那句话,先把自己的屁股先给擦干净喽再怀疑别人吧!

引申到另一个话题 ,一个较大型程序存在此类文件句柄耗尽的问题,该如何去排查呢?

一个简单原始的办法——打开Procmon(Process Monitor)分析所有的CreateFile与CloseFile个数,就会发现某个或某些文件的关闭不足够了。

可能有人会说我用的是fopen,也没用CreateFile啊。其实啊,只要是Windows系统,fopen这类C的库函数最终肯定会调用CreateFile来的。

且这个fopen的509次限制(至少Windows)应该也是这个C的库函数中加入的,实践证明使用CreateFile替换fopen后程序又愉快地工作了。

当然使用CreateFile替换fopen只是一时的迂回,根本上还是得把句柄给及时释放掉以免造成更大的怪事情。

1,背景:测试部说录像不成功,经小维查明是fopen返回NULL导致

工程代码:

FILE* pFile = fopen(recPath, "wb");

if (NULL == pFile)

{

printf("fopen return NULL, error=%d/n", GetLastError());

}

失败时打印:fopen return NULL, error=0

继续运行时打印&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值