偶尔打开文件失败
不知道大家有没有遇到这个问题:平时读写文件的时候都没问题,上周末测试的时候突然发现打开文件失败,我就尝试打开别的文件,结果也是打开失败,重启后正常.
我是用fopen做的,如:
FILE *file;
file = fopen("map1", "r+");
发现打开文件失败后,尝试打开别的文件,
file = fopen("map2", "r+");
file = fopen("map3", "r+");
file = fopen("map4", "r+");
都同样失败,这个问题不是经常出现.退出程序重新进去后正常.
这段代码是去年写的,调试一年多以来,就出现过一次打开文件失败,那时没注意,上周末在评审时候第二次出现这个问题,有什么办法解决这个问题呢?希望各大虾能帮忙一下
------解决方案--------------------你把errno打出来,至少要知道为什么fopen出错
------解决方案--------------------是不是在程序中偶尔更改了工作目录或其他目录,导致找不到 map1/2/3...
------解决方案--------------------是文件状态没有清空吧?估计之前有文件打开未close
------解决方案--------------------很可能是有其他程序打开了这个文件,或者是这个文件被多次打开后句柄没关闭
------解决方案--------------------林哥果然用功啊,佩服佩服。
------解决方案--------------------
不是说这几个文件换了目录,而是你的某个不经常的操作可能改变了程序的当前目录
------解决方案--------------------我想,这可能是发生异常了吧。
看errno 是个好办法。
估计系统出了啥问题。
------解决方案--------------------
查询 /proc/self/fd/或/proc/self/fdinfo/目录下有多少文件描述符就可以知道当前进程打开的文件总数
------解决方案--------------------楼上的应该可以
------解决方案--------------------sys/resource.h 中定义的RLIMIT_NOFILE是可以打开的文件数
------解决方案--------------------为什么不在写代码的时候,就直接判断文件打开是否成功,并且失败的时候直接打出来errno呢?这个时候,产品
都release出去了,遇到问题才想起errno的重要性来...
我前几天遇到一个和你几乎一摸一样的问题,代码是别人写的,我调了半个小时,总是在bind()的时候失败,后
来跟进去,发现就判断个返回值,我自己又加了句errno,一下就看出问题了