_mcleanup: gmon.out: too many open files
-
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