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



问题与标题相同,操作系统是linux。我试过几个例子。

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

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

我认为文件描述符只是指向结构文件的指针数组的索引,如果没有fd引用该

结构性文件然后我尝试了

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

这起到了作用。

我想我遗漏了一些核心概念。感谢您的帮助。

您关闭了stdout,然后试图打开它。但您已经关闭了它,所以没有什么可打开的。如果您没有stdout,因为您已经关闭了它,那么/dev/stdout就不存在。

我很好奇你怎么会想到这个。

最新更新