gpt4 book ai didi

c - execl 是否需要 dup2()

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:30 24 4
gpt4 key购买 nike

使用管道时是否需要将stdin换成pipe端?

我有一个应用程序:-

  • 创建一个管道,
  • fork 一个子进程,然后
  • execl() 在新的子进程中执行一个新的进程镜像,

但我遇到了两个概念性问题。

  1. 是否需要用dup()dup2()来代替stdin?显然只使用管道中的 fd 会更容易。 (我不需要对此有什么了解)

  2. 如果您只能使用管道中的 fd,那么当execl 接受 char * 参数?

我无法弄清楚在执行 execl() 之后究竟还有哪些内容处于打开状态,以及如何从新执行的进程中访问该信息。

最佳答案

这取决于您正在运行的命令。然而,许多 Unix 命令从标准输入读取并写入标准输出,所以如果管道没有设置为写入端是一个命令的输出而读取端是下一个命令的输入,则什么也不会发生(或,更准确地说,程序从没有输入的地方读取,或者写入不会被读取的地方,或者挂起等待您在终端键入输入,或者无法按预期工作)。

如果您的管道位于文件描述符 3 和 4 上,则您执行的命令必须知道从 3 读取并写入 4。您可以使用 shell 处理它,但与使用 dup2().

没有;您不是必须使用 dup2(),但这样做通常更容易。您可以关闭标准输出,然后使用普通的 dup() 而不是 dup2()

如果您对管道使用 dup2(),请不要忘记关闭原始文件描述符的两者

关于c - execl 是否需要 dup2(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15942560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com