所以只是爲了澄清。這是一個學校作業。我們正在編寫一個簡化的查找程序(sfind),並且我遇到了一個問題。編寫我自己的查找程序時出現Seg錯誤
基本上,在任何情況下,-print標誌都可以在任何情況下都可以完美地工作,因爲這種情況下沒有太多的數據可以查看。但是,當我嘗試從我的基目錄(其中有大量文件)運行它時,我最終遇到了seg故障。我覺得這可能是由於許多原因。
- 我的用戶進程限制太低
- 我的最大文件大小太低
- 我得到堆棧溢出了太深的遞歸
- 我俯瞰
我在ubuntu上運行它,它將事件徹底地在Unix服務器上運行。
這是我目前的遞歸代碼。
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;
}
這裏是文件
#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;
}
因爲你沒有基礎案例 –
你能澄清一點嗎?因爲代碼更多。我將在 – Joe
中編輯它使用調試器的時間。 – Olaf