Provided by: manpages-zh_1.6.4.0-1_all bug

NAME

       stdin, stdout, stderr — 标准 I/O 流

SYNOPSIS 总览

       #include <stdio.h>
       extern FILE *stdin;
       extern FILE *stdout;
       extern FILE *stderr;

DESCRIPTION 描述

       通常,每个  Unix 程序在启动时都会打开三个流,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。典型
       的,他们被连接到用户的终端 (参见 tty(4)) 但是也有可能指向文件或是其他设备,取决于父进程选择设置了什么 (参
       见 sh(1) 的重定向 (``Redirection'') 章节。)

       输入流被称为 ``standard input''; 输出流被称为 ``standard output''; 错误流被称为 ``standard  error''。这些
       名词通常简写为符号,用于引用这些文件,它们是 stdin, stdout, 和 stderr.

       这些符号中,每一个都是  stdio(3)  中的一个宏,类型是指向 FILE 的指针,可以用于类似 fprintf(3) 或 fread(3)
       等函数中。

       由于 FILE 是一个对 Unix  文件描述符加以缓冲的包装,下层的文件也可以使用原始的  Unix  文件接口来存取。也就
       是,类似  read(2) 和 lseek(2) 的函数。与流 stdin, stdout, 和 stderr 关联的整数形式的文件描述符分别是 0,1
       还有 2。预处理器符号 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO 分别以它们为值,定义在 <unistd.h> 中。

       注意混合使用 FILE  和原始的文件描述符可能带来不可预料的结果,一般应当避免。(对于喜欢追根问底的人:POSIX.1
       规范的   8.2.3  节详细地描述了这样的混合使用怎样才能不出错。)  一个简单的规则是,文件描述符由内核控制,而
       stdio 仅仅是一个库。它的意思是,例如当调用 exec  之后,子进程可以继承所有打开的文件描述符,但是任何原有的
       流都不可再存取了。

       由于符号  stdin, stdout, 和 stderr 被指定为宏,为它们赋值将导致不可移植。利用库函数 freopen(3) ,标准流可
       以用来指向不同的文件。引进这个函数专门用来为 stdin, stdout, 和 stderr 重新赋值。标准流在调用 exit(3) 和程
       序正常中止时被关闭。

SEE ALSO 参见

       sh(1), csh(1), open(2), fopen(3), stdio(3)

CONSIDERATIONS

       错误流 stderr 是非缓冲的。输出流 stdout 是行缓冲的,如果它指向一个终端。不完全的行只有在调用 fflush(3) 或
       exit(3) ,或者打印了新行符之后才会显示。这样可能带来无法预料的结果,尤其是调试输出时。标准流  (或任何其他
       流)  的缓冲模式可以用函数 setbuf(3) 或 setvbuf(3) 来切换。注意当 stdin 与一个终端关联时,也许终端驱动中存
       在输入缓冲,与 stdio 缓冲完全无关。(确实如此,一般的终端输入在内核中是行缓冲的。)  内核对输入的控制可以通
       过对 tcsetattr(3) 的调用来修改,参见 stty(1), 和 termios(3) 。

CONFORMING TO 标准参考

stdin, stdout, 和 stderr 遵循 ANSI X3.159-1989 (“ANSI C89”) 标准,这个标准同时规定了这三个流应当在程序
       启动时打开。

       本页面中文版由中文 man 手册页计划提供。
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh

Linux 2.0                                        March 24, 1998                                         STDIN(3)