首页 > 解决方案 > 使用 fork() 在 C 中递归地遍历目录

问题描述

所以我试图遍历一个目录及其子目录,打印出文件和子目录名称。我需要使用 fork() 创建一个子进程来处理打印文件名或子目录名。我目前正在使用递归函数,在检测到子目录时递归;但是,该程序正在输出重复信息。

void itterate_dir(DIR * dd){//given initial directory dd

struct dirent * curr = NULL;
curr = readdir(dd);//skip initial ./ and .. directories
curr = readdir(dd);
curr = readdir(dd);
while(curr!=NULL){

    int status = 0;
    int pid = fork();

    if(pid==0){
        //in child process
        if(curr->d_type == DT_REG){//is a file

            printf("File:\t%s\n", curr->d_name);

        }else{//is a directory

            printf("Directory:\t%s\n", curr->d_name);
            DIR * dd = opendir(strcat(curr->d_name,"/"));
            itterate_dir(dd);
            closedir(dd);

        }

    }

    wait(&status);

    curr = readdir(dd);

}   

}

当我输入一个包含 file1、file2、foo_stuff(a subdirectory)、file 3 的目录时,我得到以下输出

File:   f1
File:   f2
Directory:      more_foo
File:   f3
Directory:      more_foo
File:   f3
File:   f2
Directory:      more_foo
File:   f3
Directory:      more_foo
File:   f3

谁能解释这里发生了什么?有没有更好的方法来使用 fork() 来做到这一点而无需递归?

标签: crecursiondirectoryfork

解决方案


推荐阅读