Also nur um zu klären. Dies ist für eine Schulaufgabe. Wir schreiben ein vereinfachtes Suchprogramm (sfind) und ich stoße auf ein Problem.Seg Fehler beim Schreiben meines eigenen Suchprogramms
Grundsätzlich funktioniert das Flag -print perfekt in jeder Situation, in der es nicht viel zu sehen gibt. Wenn ich jedoch versuche, es aus meinem Basisverzeichnis (mit einer großen Anzahl von Dateien) zu starten, stoße ich schließlich auf seg-Fehler. Ich denke, das könnte aus einer Reihe von Gründen sein.
- Mein Benutzerprozessgrenze zu niedrig
- Meine maximale Dateigröße zu niedrig ist
- ich Stack-Überlauf für zu tief Rekursion bin immer
- Einige andere Sache, die ich
Ich führe dies auf Ubuntu, und es wird auf einem Unix-Server möglicherweise zurückgegeben werden.
Hier ist mein aktueller Rekursionscode. Hier
int printHelper(struct dirent *entry, DIR *dir, char* path){
struct stat fileStat;
DIR *tempDir;
char tempPath[1000];
char const* name = entry->d_name;
strcpy(tempPath, path);
strcat(tempPath, name);
lstat(tempPath, &fileStat);
if(strcmp(name, ".") != 0 && strcmp(name, "..") != 0){
printf("%s%s\n", path, name);
}
if((S_ISDIR(fileStat.st_mode)) && (strcmp(name, ".") != 0) && (strcmp(name, "..") != 0)){
struct dirent *tempEntr;
char newTempPath[1000];
char newPathName[1000];
strcpy(newPathName, name);
strcpy(newTempPath, path);
strcat(newTempPath, newPathName);
strcat(newTempPath, slashPath);
tempDir = opendir(newTempPath);
tempEntr = readdir(tempDir);
printHelper(tempEntr, tempDir, newTempPath);
closedir(tempDir);
}
if(!(entry = readdir(dir))){
return 0;
}
printHelper(entry, dir, path);
return 0;
}
ist der Anfang der Datei
#include <sys/stat.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include "myPrint.h"
char slashPath[3] = "/\0";
int myPrint(char const* myFile){
DIR *dir;
struct dirent *entry;
int isDir;
isDir = 1;
if (!(dir = opendir(myFile))){
isDir = 0;
}
else if (!(entry = readdir(dir))){
return -1;
}
if(isDir == 0){
dir = opendir(".");
while((entry = readdir(dir))){
if(strcmp(myFile, entry->d_name) == 0){
printf("%s\n", myFile);
return 0;
}
}
printf("find: ‘%s’: No such file or directory\n", myFile);
return 0;
}
else{
char path[2000];
strcpy(path, myFile);
strcat(path, slashPath);
printf("%s\n", myFile);
printHelper(entry, dir, path);
return 0;
}
return 0;
}
weil Sie keinen Basisfall haben –
Könnten Sie ein wenig klären? Weil es mehr im Code gibt. Ich werde es in – Joe
Zeit bearbeiten, um den Debugger zu verwenden. – Olaf