我需要創建一個程序,基本上行爲類似於Linux上的列表實用程序。我一直試圖讓這個工作,我非常接近,但現在我已經卡住了。從本質上講,它將打印包含在目錄中的任何文件和子目錄(即,如果我運行./project3,它會在該目錄中列出凡是)。但是,一旦我試圖讓遞歸調用工作就吐出這樣的:程序打印目錄使用c不工作,問題與遞歸調用
sh: 1: /home/RageKage/Documents/Project3/dir1: Permission denied
這就是我堅持,我不完全知道該怎麼在這裏做。我得到了使用實時路徑探索目錄的路徑,這工作正常,但遞歸調用不起作用,我不完全確定我做錯了什麼。任何幫助將不勝感激,因爲我相對較新。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <limits.h>
int main (int argc, char *argv[])
{
DIR *dir;
struct dirent *sd;
const char *direct;
char buf[PATH_MAX + 1];
if (argc < 2)
{
direct = ".";
}else{
direct = argv[1];
//printf("Hey this is argv[1]: %s\n", argv[1]);
}
dir = opendir(direct);
if (dir == NULL)
{
printf("ERROR! NO DIRECTORY TO OPEN!\n");
exit(1);
}
while((sd=readdir(dir)) != NULL)
{
if (!strcmp(sd->d_name, ".") || !strcmp(sd->d_name, ".."))
{
}else{
printf("\n>> %s\n", sd->d_name);
}
if (!strcmp(sd->d_name, "..") || !strcmp(sd->d_name, "."))
{
}else if (sd->d_type == 4){
printf("Attempting to Run!\n");
realpath(sd->d_name, buf);
printf("[%s]\n", buf);
system(("./project3 %s", buf));
printf("\n");
}
}
closedir(dir);
return 0;
}
哪裏是遞歸? – melpomene
'''realpath(sd-> d_name,buf); system(buf); 012f''' buf包含目錄的真實路徑加上我相信用來啓動程序的命令,所以類似./project3/home/RageKageDocuments/Project3/dir3。至少這就是我打印buf時得到的結果。 – RageKage
真的嗎?運行此程序時獲得的確切輸出是什麼? – melpomene