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)
)
当输入来自控制台,输出到控制台时,那么这三个确实恰好指向同一个文件。(但是控制台设备有完全不同的读取和写入实现。)
无论如何,您应该仅将 stdin/stdout/stderr 用于其预期目的;否则,像下面这样的重定向将不起作用:
<inputfile myprogram >outputfile
Run Code Online (Sandbox Code Playgroud)
(在这里,stdin
并且stdout
指的是两个不同的文件,stderr
指的是控制台)。