gpt4 book ai didi

关于 dup() 用法的困惑

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:18 27 4
gpt4 key购买 nike

当我们使用 dup 将 STDOUT 重定向到我们做的管道时:

close(1); dup(fd[1]);
close(fd[0]);
close(fd[1]);
execlp("ls","-al",(char *) NULL);

但我们正在关闭管道的两端。那么如何将 STDOUT 写入管道?

最佳答案

在示例代码中,您没有关闭管道的两端。您正在关闭 fd[0]fd[1]。最初,关闭它们就足以关闭管道的两端,但在复制 fd[0] 之后就不行了。您还必须关闭重复的 fd 才能关闭对管道的所有引用。但这将是愚蠢的:你正在保持一个端点打开,以便 ls 可以写入。

也许您对 close() 正在关闭感到困惑?它关闭 fd,即对管道一端的引用。它不会关闭管道本身:这就是 shutdown() 会做的事情。 (如果你不调用 shutdown,当每个引用它的 fd 关闭时管道自动关闭。)所以,因为复制的 fd 仍然打开,进程可以写入管道(它没有关闭,因为对它的三个引用中只有两个被关闭)。

关于关于 dup() 用法的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13800606/

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