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-ZeichenDies 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.