【发布时间】:2021-07-19 06:18:15
【问题描述】:
在我的课堂上,教授展示了我们如何使用execv() 进行输出/输入重定向,因为execv() 不会替换进程的当前文件对象表 (FDT):
但我不明白,为什么我们需要使用execv() 并调用fork(),这与使用父进程打开该文件并使用open() 和@987654326 写入它有什么不同@。
另一个问题:为什么父母需要等待孩子?
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);
}
【问题讨论】:
-
您可能想改用
execvp;否则您需要将date替换为完整路径,例如/usr/bin/date。 -
@NateEldredge 我知道,假设它在当前文件中
-
这是我教授写的,错了吗?
标签: c linux shell unix system-calls