_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
    

Anmelden zum Antworten