c - 使用 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() 来做到这一点而无需递归?
解决方案
推荐阅读
- php - 需要的建议:命名空间应用程序 Laravel 的项目结构
- c++ - 溢出的原因(G++ vs Clang++)
- asynchronous - 在 Dart 中 Future.wait 真的是异步的吗?
- javascript - 用于竞赛问题的对象与地图的 Javscript 性能
- python - 无法在数据工厂上创建变量活动
- jquery - 如何将嵌套的 JSON 传递给 Spring Controller
- linux - 我无法从 shell 脚本启动 virtualenv
- vba - 有没有更好的方法来完成这个循环?
- python - 使用带有条件的order_by时出现奇怪的海狸无法将关键字'-pub_date解析为字段
- javascript - 如何检测 type=time 的输入是否输入了任何值