因此,我试图遍历目录及其子目录,打印出文件和子目录的名称。我需要使用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(子目录),文件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()来做到这一点而无需递归?