在项目中使用了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的文件地址。
filename 必需。规定要打开的文件或 URL。
mode 必需。规定要求到该文件/流的访问类型。
include_path 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。
说明:
fopen
() 将 filename 指定的名字资源绑
【基本概念】
1、
阻塞
阻塞
操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件后再进行操作。被挂起的进程进入休眠状态(不占用cpu资源),从调度器的运行队列转移到等待队列,直到条件满足。
2、非
阻塞
非
阻塞
操作是指在进行设备操作是,若操作条件不满足并不会挂起,而是直接返回或重新查询(一直占用CPU资源)直到操作条件满足为止。
当用户空间的应用...
windows nginx造成的file_get_contents、
fopen
、curl在访问本地php文件造成
阻塞
的问题相信很多人都遇到过,关于这个问题涉及到了php的运行等问题,有兴趣的可以先去看我上一篇博客对php运行的讲解php的运行原理、cgi对比fastcgi以及php-cgi和php-fpm之间的联系区别。这个问题有许多博客都讲解过,不过在我解决问题的过程中我发现许多博客写的要么不够
一、问题描述
fopen
函数
使用过程发现,当
fopen
要打开的文件路径中,包含一个不存在路径时,不管
fopen
函数
的第二参数设成什么,都无法建立该文件。实例:char *filename = "/usr/local/ct/mirror_im_protocol.cfg";FILE *fp = NULL; if ((fp=
fopen
(filename,"a"))==NULL){ printf("o...
了解
阻塞
模式和非
阻塞
模式龙行个人随笔2019-11-2817330评论其实看到这两个词'
阻塞
'和'非
阻塞
'估计就会明白一大半了.再来详细说说这两个词的区别:一:先来说说概念:
阻塞
与非
阻塞
阻塞
和非
阻塞
关注的是程序在等待调用结果(消息,返回值)时的状态.
阻塞
调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非
阻塞
调用指在不能立刻得到结果之前...
简而言之,产生段错误就是访问了错误的内存段。一、一般来说,段错误就是指访问的内存超出了系统分配给这个程序的内存空间,通常这个值是由gdtr来保存的,1)gdtr是一个48位的寄存器,其中的32位是保 存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别。2)指向的gdt是由以64位为一 个单位的表,在这张表中就保存着程序运行的代码段以及...
fopen
出现段错误,不解[已解决](2012-04-10 04:10:26)标签:杂谈
fopen
出现段错误,不解[已解决]本来在Gentoo下编的一个C库,通过swig提供一个python接口今天把程序拷贝到openSUSE下,编译通过,运行出错,attach上gdb看了下,是
fopen
出段错误目前完全找不到北,大家指点下===============================我是分割线=...
最近
fopen
遇到打不开文件的问题,参考下面的方法3问题解决了。
原文链接:https://blog.csdn.net/Andy_93/article/details/78865000
最近在分析一个偶现的问题,偶现概率特别低,问题还在分析中。把分析的知识做个总结,后面再继续补充。
问题描述:
代码在调用Lua的require
函数
时发生异常,通过查看require的源码跟踪,发现该
函数
的
fopen
函数
返回打开文件失败的异常,
下面就来总结下
fopen
打开文件出错可能有哪些原因,也许不全,欢迎补充。
今天tuxedo的某个服务一调用就挂死,不报错,没coredump,经过打日志定位,有问题的代码是这一行:
fprintf(m_fp,"%s%s",strTime.c_str(),strFmt.c_str());
m_fp是File*,后面两个变量都是string,并且都能打印出来,没有问题。
DaYong一口咬定就是
fopen
的问题。于是查看
fopen
的代码:
m_fp =...