C为什么我们需要"execv()"进行重定向



在我的课堂上,教授展示了我们如何使用execv()进行输出/输入重定向,因为execv()不会替换进程的当前文件对象表(FDT(:

但我不明白,为什么我们需要使用execv()并调用fork(),这与使用父进程打开该文件并使用open()write()写入文件有什么不同。

另一个问题:为什么父母需要等待孩子?

shell code:
pid_t pid = fork();
if (pid == 0) {
   close(1);
   open("file.txt",
      O_CREAT …, …);
   char* args[] =
      {"date", NULL};
   execv(args[0],
      args);
} else {
   wait(NULL);
}

使用execv,您可以执行外部命令,在本例中为date

正如您所说,父进程可以用openwrite自己编写文件,但您要在其中编写什么文本?您必须编写自己的代码来确定当前的日期和时间,并以正确的方式对其进行格式化。执行date命令可以避免重新设计轮子。

需要wait来确保子进程在父进程继续之前已经终止。否则,父进程可能会在子进程仍在工作时完成。用户可能希望当程序返回时,文件file.txt是完整的,并且包含正确的数据,并且他们可以立即运行另一个使用该文件内容的命令。如果没有wait,就无法保证这一点。

最新更新