来自Ubuntu手册页面 stdin(3)
:
extern FILE *stdout;
来自mingw64的stdio.h
文件:
#define stdout (&__iob_func()[1])
两者都表明指针类型的stdout
值不能被视为常量。
我还能依赖下面这样的代码吗:
FILE * stream;
// early after startup
stream = stdout;
// much later, far down the stack, in a different function
fprintf(stream, "%s", "fprintf(stream, \"");
STDIN_FILENO
、STDOUT_FILENO
和STDERR_FILENO
(0, 1, 2
) 相关联的流。话虽如此,它们可以通过dup()
和dup2()
进行复制和重新分配。如果没有进行复制或重新分配等操作,则常量和相关流是恒定的。这意味着,除非您重新分配等操作,否则可以从文件描述符0
中读取,并将其写入文件描述符1
和2
,并且始终是stdin
、stdout
和stderr
-- 除非您更改它们。 - David C. Rankinstdout
的值被用作句柄。我想知道这个句柄是否永久有效。(相比之下,函数指针永久有效。至少如果你不将其dlclose()
释放出内存。) - not-a-user