为什么在close(1),open(“ / dev / stdout”,O_WRONLY)之前使用dup(1)会导致“没有此类文件”?

问题与标题相同,操作系统为linux。 我已经尝试了一些例子。

((1 to: 10000) select: [:x | (x/10.0) = (x/10) and: [(x/1000.0) ~= (x/1000)]])
    allSatisfy: [:x | (x/1000.0*100) = (x/10)]

这引起了“ / dev / stdout No such file”错误。

我认为文件描述符只是指向指向 struct文件的指针数组的索引,如果没有fd引用 struct file 。 如果我使用dup(1),是否不应该创建一个指向fd 1指向的fd 3,以便close(1)不能清除/ dev / stdout?

然后我尝试了

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

这可行。

我认为我缺少一些核心概念。感谢您的任何帮助,谢谢。

taodaidai 回答:为什么在close(1),open(“ / dev / stdout”,O_WRONLY)之前使用dup(1)会导致“没有此类文件”?

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

我很好奇您希望这返回什么。

本文链接:https://www.f2er.com/3079300.html

大家都在问