原因:句柄被用完了
出现这种情况有会是以下几种情况导致的:
1:文件句柄未关闭 包括普通文件、socket描述符、数据库连接等
2:所有句柄虽然释放了,但是没有人工释放,在垃圾回收中积累着,在某一时刻爆发出错。
3:在fclose(fp)之前,操作系统并未将缓冲区中的文件内容写入磁盘,导致写多次后打开的文件就多了
解决办法:
1:通过ulimit 来修改 file opens选项的值(只使用当前会话)
2:echo "8192" > /proc/sys/fs/fs-max 重启电脑(不一定管用)
3:最好的办法就是检查源码,修改错误。
另外:如果fclose(fp),其中fp并未指向任何文件,这样会导致程序崩溃或出现内存错误。