当前位置: 技术问答>linux和unix
求助:AIX下一段频繁处理文件的程序出现的问题
来源: 互联网 发布时间:2016-07-28
本文导语: 本帖最后由 kevin6636 于 2010-01-07 15:02:47 编辑 程序的大致作用是遍历几个目录,读取文件进行处理,而后删除,但是在处理一段时间后总是会报错:too many open files。在/proc/进程id/fd目录下确实发现大量文件。 我原以...
我原以为是程序写的不好,于是通过不断的简化程序来找出错误,但是在简化成如下的样子后还是不行,想请各位达人看一下究竟是什么原因?
搜索的目录下约200个文件。
#include
#include
#include
#include
#include
#include
main()
{
FILE *fd = NULL ;
char filename[100];
struct dirent* subent = NULL;
DIR *pSubDir;
do {
pSubDir=opendir("/tmp/msglog/ybAyy2/0/10/00/");
while (NULL != (subent=readdir(pSubDir)))
{
if (strcmp(subent->d_name,".")!=0 && strcmp(subent->d_name,"..")!=0)
{
memset(filename, 0, 100);
memcpy(filename, "/tmp/msglog/ybAyy2/0/10/00/", 27);
memcpy(filename+27,subent->d_name,20); /*所有文件名都是规范的,20个字符*/
fd=fopen(filename,"r");
if(fd == NULL)
{
fprintf(stderr,"(STRERROR)Error opening file: %sn", strerror(errno));
}
else
{
if (fclose(fd)!=0)
fprintf(stderr,"(STRERROR)Error close file: %sn", strerror(errno));
}
}
}
closedir("/tmp/msglog/ybAyy2/0/10/00/");
} while (TRUE);
}
|
不知道lz怎么退出循环
虽然每次fd=fopen(filename,"r"); 都释放了
pSubDir=opendir("/tmp/msglog/ybAyy2/0/10/00/");
没见释放,也没见退出循环
估计是opendir 打开的文件过多
虽然每次fd=fopen(filename,"r"); 都释放了
pSubDir=opendir("/tmp/msglog/ybAyy2/0/10/00/");
没见释放,也没见退出循环
估计是opendir 打开的文件过多