stdin 和 stdout 实际上是同一个文件吗?

Fer*_*iho 4 c linux stdin stdout io-redirection

我很困惑,stdin、stdout 和 stderr 是否有可能在内部指向同一个文件描述符?因为如果我使用 stdin 作为输入或 stdout,如果我想从控制台读取字符串,它在 C 中没有区别。

read(1, buf, 200)read(0, buf, 200)怎么可能?

( 0 == STDIN_FILENO == fileno(stdin),
1 == STDOUT_FILENO == fileno(stdout))

CL.*_*CL. 5

当输入来自控制台,输出到控制台时,那么这三个确实恰好指向同一个文件。(但是控制台设备有完全不同的读取和写入实现。)

无论如何,您应该仅将 stdin/stdout/stderr 用于其预期目的;否则,像下面这样的重定向将不起作用:

<inputfile myprogram >outputfile
Run Code Online (Sandbox Code Playgroud)

(在这里,stdin并且stdout指的是两个不同的文件,stderr指的是控制台)。

  • *console device* 在这两种情况下都是相同的设备,但对 `read()` 和 `write()` 有不同的实现。 (2认同)