PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : _mcleanup: gmon.out: too many open files



mrsuicide
01-10-2003, 05:27
Ich habe eine schöne rekrusive Suche geschrieben:


void ReadDir(char startdir[MAXBUF])
{
struct dirent *dirzeiger;
DIR *dir=NULL;
char currdir[MAXBUF],*filename=NULL;
dir=opendir(startdir);
if (dir==NULL)return;
struct stat sb;
while((dirzeiger=readdir(dir)) != NULL)
{
filename=(char *)malloc(sizeof((*dirzeiger).d_name));
strcpy(filename,(*dirzeiger).d_name);
if(strcmp(filename,".")==0)continue;
else if(strcmp(filename,"..")==0)continue;
else if(strcmp(filename,"dev")==0)continue;
strcpy(currdir,startdir);
if(strlen(currdir)+strlen(filename)<MAXBUF-1)strcat(currdir,filename);
if (stat(currdir, &sb))continue;
if(S_ISREG(sb.st_mode) && SearchFile(currdir))printf("%s\n",currdir);
strcat(currdir,"/");
if (S_ISDIR(sb.st_mode))ReadDir(currdir);
free(filename);
}
return;
}

bool SearchFile(char *filename)
{
FILE *f=fopen(filename,"rb");
(...fread e.t.c...)
fclose(f);
return false;
}


Meine Probleme sind:

-bei einigen Normalen Files (also keinen Devices oder Sockets, welche ja durch S_ISREG() ausgeschlossen werden), crasht fclose() dass Proggy, obwohl ich mit fread() wunderbar aus der Datei lesen kann

-obwohl ich alle Files ordnungsgemöß mit fclose() schließe bekomme ich, wenn das Programm nicht gerade wegen fclose() gecrasht ist irgendwann:


_mcleanup: gmon.out: too many open files