gpt4 book ai didi

c++ - 我可以为两个子进程重定向标准输出吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:42 25 4
gpt4 key购买 nike

在 C/C++ 中,您可以通过 dup2( ..., STDERR_FILENO)[1] 从子进程中读取标准输出。我真的不明白 dup2 是做什么的;我可以为同时运行的两个子进程做两次吗?我发现我现有的实现存在一个问题,其中一个实现无法完成阅读 STDERR,我想知道这是实现错误还是根本不可能。

编辑:它们由不同的线程启动。启动和停止可以以任何方式交错。

[1] 例如喜欢Linux 3.0: Executing child process with piped stdin/stdout

最佳答案

将文件描述符视为指向内核维护的文件对象的引用计数/智能间接指针。dup (dup2, dup3) 通过增加内核维护的文件对象的引用计数来复制智能“指针”。如果引用计数变为 0close 会减少引用计数并破坏内核维护的文件对象。

这些文件对象可能被多个进程共享,这通常发生在一个进程fork时(一个fork也增加了由继承的文件描述符(通过 UNIX 套接字发送文件描述符也是如此)。

(在处理由 forking 复制的 pipe 文件描述符时,牢记这个模型尤为重要,因为当它的写端(在所有具有引用该写端的 fd 的进程中)已关闭。)

关于c++ - 我可以为两个子进程重定向标准输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42093775/

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