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

用户15728444

在我的课上,教授展示了我们如何使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们需要进行软件复位,I2C 协议?

来自分类Dev

为什么我们需要放置源名称来进行重定向?

来自分类Dev

为什么我们需要C ++中的虚函数?

来自分类Dev

为什么我们需要声明枚举变量?(C)

来自分类Dev

为什么我们需要GPU进行深度学习?

来自分类Dev

为什么我们不能在C ++中进行三向比较?

来自分类Dev

为什么我们需要Web API或WCF服务进行自我托管?

来自分类Dev

为什么我们需要在此脚本中调用“ c.set.bind(c)”?

来自分类Dev

为什么我们需要C ++中的纯虚拟析构函数?

来自分类Dev

为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

来自分类Dev

为什么我们在C ++中需要飞船<=>运算符?

来自分类Dev

如果C ++编译为机器代码,为什么我们需要安装“运行时”?

来自分类Dev

为什么我们需要在C#中装箱和拆箱?

来自分类Dev

为什么我们需要C中的终止符

来自分类Dev

为什么我们需要在C#中锁定并反对?

来自分类Dev

为什么在C#方法中我们需要多个`await`语句?

来自分类Dev

为什么我们需要C ++中的基本数据类型

来自分类Dev

在 C 中使用指针时,我们何时以及为什么需要使用 malloc?

来自分类Dev

为什么我们在这个程序中需要虚拟(Turbo C++)?

来自分类Dev

为什么我们不能在C#中使用公共字段进行数据绑定?

来自分类Dev

为什么我们不能将int变量与c中的int返回类型函数进行比较?

来自分类Dev

为什么我们需要运行selenium独立服务器来进行webdriverjs测试?

来自分类Dev

为什么我们需要另一个模式来进行模式缝合?

来自分类Dev

谁能解释为什么我们需要在SpriteKit中进行缩放?

来自分类Java

为什么我们需要使用Collection.sort()方法对List进行排序?

来自分类Dev

为什么我们需要io_service进行加速?

来自分类Dev

为什么我们需要针对不同的平台(例如Windows / Linux)进行编译?

来自分类Dev

为什么我们需要在RL(Q-Learning)中进行开发以实现融合?

来自分类Dev

为什么我们可以对类本身进行操作,但又需要接口呢?

Related 相关文章

  1. 1

    为什么我们需要进行软件复位,I2C 协议?

  2. 2

    为什么我们需要放置源名称来进行重定向?

  3. 3

    为什么我们需要C ++中的虚函数?

  4. 4

    为什么我们需要声明枚举变量?(C)

  5. 5

    为什么我们需要GPU进行深度学习?

  6. 6

    为什么我们不能在C ++中进行三向比较?

  7. 7

    为什么我们需要Web API或WCF服务进行自我托管?

  8. 8

    为什么我们需要在此脚本中调用“ c.set.bind(c)”?

  9. 9

    为什么我们需要C ++中的纯虚拟析构函数?

  10. 10

    为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

  11. 11

    为什么我们在C ++中需要飞船<=>运算符?

  12. 12

    如果C ++编译为机器代码,为什么我们需要安装“运行时”?

  13. 13

    为什么我们需要在C#中装箱和拆箱?

  14. 14

    为什么我们需要C中的终止符

  15. 15

    为什么我们需要在C#中锁定并反对?

  16. 16

    为什么在C#方法中我们需要多个`await`语句?

  17. 17

    为什么我们需要C ++中的基本数据类型

  18. 18

    在 C 中使用指针时,我们何时以及为什么需要使用 malloc?

  19. 19

    为什么我们在这个程序中需要虚拟(Turbo C++)?

  20. 20

    为什么我们不能在C#中使用公共字段进行数据绑定?

  21. 21

    为什么我们不能将int变量与c中的int返回类型函数进行比较?

  22. 22

    为什么我们需要运行selenium独立服务器来进行webdriverjs测试?

  23. 23

    为什么我们需要另一个模式来进行模式缝合?

  24. 24

    谁能解释为什么我们需要在SpriteKit中进行缩放?

  25. 25

    为什么我们需要使用Collection.sort()方法对List进行排序?

  26. 26

    为什么我们需要io_service进行加速?

  27. 27

    为什么我们需要针对不同的平台(例如Windows / Linux)进行编译?

  28. 28

    为什么我们需要在RL(Q-Learning)中进行开发以实现融合?

  29. 29

    为什么我们可以对类本身进行操作,但又需要接口呢?

热门标签

归档