gpt4 book ai didi

c - 为什么在 close(1), open ("/dev/stdout", O_WRONLY) 之前使用 dup(1) 会导致 "No such file"?

转载 作者:行者123 更新时间:2023-12-03 09:59:07 26 4
gpt4 key购买 nike

问题和标题一样,操作系统是linux。
我试过几个例子。

dup(1);
close(1);
int fd = open("/dev/stdout", O_WRONLY);

这导致了“/dev/stdout No such file”错误。

我认为文件描述符只是指向 的指针数组的索引。结构文件 ,如果没有 fd 引用该 ,close() 将清除资源结构文件 .
如果我使用 dup(1),它不应该创建一个指向 fd 1 所指内容的 fd 3,这样 close(1) 就不会清除/dev/stdout 吗?

然后我试过了
int tmp = dup(1);
close(1);
dup(tmp, 1);
int fd = open("/dev/stdout", O_WRONLY);

这奏效了。

我想我缺少一些核心概念。任何帮助表示赞赏,谢谢。

最佳答案

您关闭了标准输出,然后尝试打开它。但是你已经关闭了它,所以没有什么可以打开的。如果你没有标准输出,因为你已经关闭了它,那么 /dev/stdout不存在。

我很好奇你期望它返回什么。

关于c - 为什么在 close(1), open ("/dev/stdout", O_WRONLY) 之前使用 dup(1) 会导致 "No such file"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58919181/

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