在 C 中使用 fork 扫描目录并同时处理特定文件
Scanning a directory and processing specific files simultaneously with fork in C
我的目标是实现一个 "ls" 函数,以便我可以扫描指定目录并查找要处理的 .csv 文件。我现在的想法是每次使用 ls 函数检测到 csv 文件时使用 fork() 创建一个子进程,但我对如何执行此操作感到非常困惑。我已经阅读了 geeksforgeeks 上的 fork() 页面,如果我每次检测到 csv 文件时都调用 fork,子进程会一直乘以 2 吗?我是否必须将整个处理代码包装在 fork 语句中?如果我在创建另一个子进程之前等待每个子进程完成,那将不是多处理。我仍在学习 C,我发现很难掌握 fork 函数的实际工作原理。任何帮助将不胜感激,谢谢。
基本结构应该是这样的:
while(d = readdir(fd) {
if (iscsv(d->d_name)) {
int pid = fork();
switch(pid) {
case 0: // Child process
process_csv(d->d_name);
exit(0);
break;
case -1: // Error
perror("fork");
exit(1);
break;
default: // Parent
printf("Forked PID %d to process %s\n", pid, d->d_name);
}
}
pid
的 return 值用于区分您是在父级还是子级中继续。子进程处理文件并退出,父进程继续循环。所以你不会保持加倍进程(称为 fork bomb),因为只有原始父级保持循环和分叉。
我的目标是实现一个 "ls" 函数,以便我可以扫描指定目录并查找要处理的 .csv 文件。我现在的想法是每次使用 ls 函数检测到 csv 文件时使用 fork() 创建一个子进程,但我对如何执行此操作感到非常困惑。我已经阅读了 geeksforgeeks 上的 fork() 页面,如果我每次检测到 csv 文件时都调用 fork,子进程会一直乘以 2 吗?我是否必须将整个处理代码包装在 fork 语句中?如果我在创建另一个子进程之前等待每个子进程完成,那将不是多处理。我仍在学习 C,我发现很难掌握 fork 函数的实际工作原理。任何帮助将不胜感激,谢谢。
基本结构应该是这样的:
while(d = readdir(fd) {
if (iscsv(d->d_name)) {
int pid = fork();
switch(pid) {
case 0: // Child process
process_csv(d->d_name);
exit(0);
break;
case -1: // Error
perror("fork");
exit(1);
break;
default: // Parent
printf("Forked PID %d to process %s\n", pid, d->d_name);
}
}
pid
的 return 值用于区分您是在父级还是子级中继续。子进程处理文件并退出,父进程继续循环。所以你不会保持加倍进程(称为 fork bomb),因为只有原始父级保持循环和分叉。