.小麥.
一個只喜歡小白兔的大灰狼..
posts - 21,comments - 15,views - 66986

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) 和程序正常中止时被关闭。
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)
宏 stdin, stdout, 和 stderr 遵 ANSI X3.159-1989 (``ANSI C'')
标准,这个标准同时规定了这三个流应当在程序启动时打开。

posted on   酒猫  阅读(14303)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
< 2010年6月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示