Linux上C语言中的递归列表目录

Linux上C语言中的递归列表目录,c,linux,dirent.h,C,Linux,Dirent.h,我需要列出一个目录中的所有项目,并列出任何子目录中的所有项目。我有这个功能: void rls_handler(const char *name, int indent){ DIR *dir; struct dirent *sd; dir = opendir(name); while((sd = readdir(dir)) != NULL){ if(sd->d_type == DT_DIR){ //if item is a directory, print its contents

我需要列出一个目录中的所有项目,并列出任何子目录中的所有项目。我有这个功能:

void rls_handler(const char *name, int indent){
DIR *dir;
struct dirent *sd;
dir = opendir(name);
while((sd = readdir(dir)) != NULL){
    if(sd->d_type == DT_DIR){ //if item is a directory, print its contents
        char path[1024];
        if((strcmp(sd->d_name, ".")) !=0 &&  (strcmp(sd->d_name, "..")) != 0){ //skip '.' and '..'
            printf("%*s[%s]\n",indent,"",sd->d_name);
            rls_handler(path,indent+2); //recurse through rls_handler with subdirectory & increase indentation
    }else{
        continue;
    }    
  }else{
    printf("%*s- %s\n",indent, "", sd->d_name);
  }
}//end while
closedir(dir);
}//end rls_handler

我在以下行中得到一个segfault:
而((sd=readdir(dir))!=NULL)
。有人能帮我找出出现此错误的原因吗?

请在呼叫后添加测试以检查:

dir = opendir(name);
dir不为null以继续处理它

您的代码应该如下所示

dir = opendir(name);
if (dir!=NULL)
{
while((sd = readdir(dir)) != NULL){
...
} //end while
closedir(dir);
} // end if dir not NULL
}//end rls_handler

请在调用后添加测试以检查:

dir = opendir(name);
dir不为null以继续处理它

您的代码应该如下所示

dir = opendir(name);
if (dir!=NULL)
{
while((sd = readdir(dir)) != NULL){
...
} //end while
closedir(dir);
} // end if dir not NULL
}//end rls_handler

检查segfault前面的
dir
中的内容。'rls_处理程序(路径,缩进+2);'路径“未初始化使用。请检查segfault前面的目录中的内容。'rls_处理程序(路径,缩进+2);”未初始化使用的“路径”。