Ordner Rekursiv durchsuchen



  • Hallo,

    Mein Script wird mit einem Segmentation Fault beendet:

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <dirent.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <string.h>
    #include <pthread.h>
    #include <time.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <signal.h>
    #include <unistd.h>

    char* read_dir (char* path)
    {
    char ab_pfad[1000];

    DIR *dir;
    struct dirent *dirzeiger;

    if((dir = opendir(path)) != NULL)
    {
    while((dirzeiger=readdir(dir)) != NULL)
    {
    // Get absolute path to file
    memset(ab_pfad, "\0", sizeof(ab_pfad));

    strcpy (ab_pfad, path);
    /* prüfen auf schrägstrich am ende! */
    //strcat (ab_pfad, "/");
    strcat (ab_pfad, (*dirzeiger).d_name);

    struct stat tester;
    FILE* f = fopen(ab_pfad, "r");
    if(f == NULL)
    {
    printf("error\n");
    }

    if (stat(ab_pfad, &tester) == -1)
    {
    printf("stat error\n");
    }
    if (S_ISDIR(tester.st_mode) && strstr(ab_pfad, "..") == NULL && strstr(ab_pfad, ".") == NULL)
    {
    printf("%s\n", ab_pfad);
    strcat (ab_pfad, "/");
    read_dir(ab_pfad);

    }
    if (!S_ISDIR(tester.st_mode))
    printf("Found File: %s\n", ab_pfad);

    fclose(f);

    }
    }
    closedir (dir);
    }

    int main (int argc, char* argv[])
    {
    read_dir(argv[1]);
    }

    Hat einer eine Idee was ich falsch mache?
    DAnke schönmals



  • man gdb

    und was soll das doppelgeposte ?



  • Hi,

    dir fehlt der Slash ('/') zwischen dem Pfad und (*dirzeiger).d_name
    in ab_pfad.

    Zusätzlich hast du einen Fehler in memset:
    "\0" ist ein String der nur aus einem Null-Zeichen besteht.
    '\0' ist das Null-Zeichen

    Dies ist ein kleiner Unterschied. 😉

    Gruß mcr

    PS: Verwendest du den gcc zum Kompilieren?
    Wenn ja, dann solltest du dir mal die Optionen von gcc anschauen.
    Der Kompiler gibt dir schon einige Hinweise, was du falsch gemacht hast.
    Inhaltliche Fehler findet er natürlich nicht. 🙂

    Die Optionen -W -Wall -pedantic sind schon ziemlich hilfreich.


Anmelden zum Antworten