【发布时间】:2026-01-01 06:30:01
【问题描述】:
我的目标是实现一个“ls”函数,以便我可以扫描指定目录并查找要处理的 .csv 文件。我现在的想法是每次使用 ls 函数检测到 csv 文件时使用 fork() 创建一个子进程,但我对如何执行此操作感到非常困惑。我已经阅读了 geeksforgeeks 上的 fork() 页面,如果每次检测到 csv 文件时都调用 fork,子进程会继续乘以 2?我是否必须将整个处理代码包装在 fork 语句中?如果我在创建另一个子进程之前等待每个子进程完成,那将不是多处理。我仍在学习 C,我发现很难掌握 fork 函数的实际工作原理。任何帮助将不胜感激,谢谢。
【问题讨论】:
-
fork调用创建的子进程不应该继续搜索目录,它应该处理文件然后exit。如果你稍微搜索一下,可能有数百万个关于如何使用fork的例子在互联网上(包括 Stack Overflow)。 -
为什么要为每个文件创建一个新进程?这是一种昂贵的方式来做你想做的任何事情。如果目的是使用
fork()锻炼你,那是一回事;如果你想做严肃的工作,那就完全是另一回事了。如果子进程 execls,那么不会有进程爆炸——它们不会每次都乘以 2。 -
调用fork后,检查返回值。如果它返回
0你在孩子中,你调用处理文件的函数并退出而不继续循环。如果它返回非零值,则您仍在父进程中,因此您继续扫描。