fopen函数阻塞的排查

在项目中使用了fopen函数阻塞现象,而且阻塞的时间很长(大概二十分钟)

函数原型:FILE * fopen(const char * path, const char * mode);

fopen出现问题分析:

1 、参数path问题, 路径不对fopen就会是返回失败。

2、 参数mode问题,mode控制文件打开的方式,如果用户打开的方式超出了当前用户的权限,那么fopen也会返回失败,此时应该检查当前用户的操作权限。

3 、检查程序中是否有句柄泄露的可能即频繁的调用fopen而没有fclose,这种情况的表象就是前面刚刚开始的时候可以open成功,过一段时间后,怎么都open不成功了,检查路径和权限都没有问题,那此时就要检查下是否句柄泄露了。一般linux最多支持1000来个句柄,打开太多不关,则其他的没法打开了

4 、通过检查errno来分析定位问题, errno是一个int型的值,在errno.h中定义不需要自己定义。可以通过strerror(errno)查看错误信息, errno是调试程序的一个重要方法。

从分析可以看出长时间的阻塞并不是fopen产生的,在项目中出现的阻塞的原因是在使用fopen之前对系统执行了ifconfig命令修改了设备的IP地址,nfs文件系统出现了问题,mount的地址也就不存在,使得fopen无法发现nfs的文件地址。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值