在我的课上,教授展示了我们如何使用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
。
父进程可以通过自身与写入文件open
,并write
像你说的,但你要什么文字写的呢?您必须编写自己的代码来确定当前日期和时间,并以正确的方式对其进行格式化。执行该date
命令可以避免重新发明轮子。
的wait
需要,以确保父进程继续之前子进程已经终止。否则,父进程可能会在子进程仍在工作时完成。用户可能期望当您的程序返回时,文件file.txt
是完整的并包含正确的数据,并且他们可以立即运行另一个使用该文件内容的命令。没有wait
,就无法保证。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句