stdout、stdin和stderr
2017-07-22 11:45
288 查看
在做题的时候遇到了fprintf(stdout,”hello”);和fprintf(stderr,”world!”),问输出结果。fprintf是输出到文件,在前面博客中有描述:http://blog.csdn.net/magiclyj/article/details/71373817;
在编译器上运行代码发现有点诡异,哈哈言过了,于是在网上查询和自己在编译器上测试了一下。我们来具体看看本尊:
stdout, stdin, stderr的中文名字分别是标准输出,标准输入和标准错误。三者都被定义在
stdout输出和cout以及printf输出一样,带有缓存区的输出,先将数据输到缓存区里在遇到换行或者程序结束后输出到屏幕。
stderr输出和cerr、flush函数类似,它也是错误输出,直接输出到屏幕,不经过缓存区,但是不同的是stderr不带有清除缓存区的功能。
我们先看看下面这段代码的输出:
运行结果:
输出是:world!hello ,而不是helloworld!
原因就是因为stderr和stdout的输出原理不同,如果加上换行我们在来看看:
运行结果:
这里由于加了换行输出顺序正确,也证实了stdout输出流遇到换行会输出。
有时候我们可以手动的设置代码来改变三者的方向,可以让输出到文件中,这就需要我们设置重定向。例如定向到文件:
如果屏蔽一个,被屏蔽的会在屏幕显示,没有被屏蔽的则输出到文件中,打开文件可以看到。可以自己代码测试一下顺便加深记忆!!!
顺便提醒freopen、fopen、fdopen三个都是文件操作函数,原型:
在编译器上运行代码发现有点诡异,哈哈言过了,于是在网上查询和自己在编译器上测试了一下。我们来具体看看本尊:
stdout, stdin, stderr的中文名字分别是标准输出,标准输入和标准错误。三者都被定义在
#include<stdio.h>头文件中,stdin的默认是从键盘输入,stdout和stderr的默认是输出到屏幕上。但是stdout和stderr二者输出是有区别的:
stdout输出和cout以及printf输出一样,带有缓存区的输出,先将数据输到缓存区里在遇到换行或者程序结束后输出到屏幕。
stderr输出和cerr、flush函数类似,它也是错误输出,直接输出到屏幕,不经过缓存区,但是不同的是stderr不带有清除缓存区的功能。
我们先看看下面这段代码的输出:
运行结果:
输出是:world!hello ,而不是helloworld!
原因就是因为stderr和stdout的输出原理不同,如果加上换行我们在来看看:
运行结果:
这里由于加了换行输出顺序正确,也证实了stdout输出流遇到换行会输出。
有时候我们可以手动的设置代码来改变三者的方向,可以让输出到文件中,这就需要我们设置重定向。例如定向到文件:
如果屏蔽一个,被屏蔽的会在屏幕显示,没有被屏蔽的则输出到文件中,打开文件可以看到。可以自己代码测试一下顺便加深记忆!!!
顺便提醒freopen、fopen、fdopen三个都是文件操作函数,原型:
#include<stdio.h> FILE *fopen(const char *path, const char *mode); FILE *fdopen(int fd, const char *mode); FILE *freopen(const char *path, cosnt char *mode, FILE *stream);
相关文章推荐
- stdin, stdout, stderr 详解
- stdin,stderr,stdout
- linux中stdout,stdin,stderr意义
- stdin,stdout,stderr与STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO的区别
- 04 Linux Shell 文件描述符 及 stdin stdout stderr 重定向
- Linux Shell 文件描述符 及 stdin stdout stderr 重定向
- 详解C语言中的stdin,stdout,stderr
- stdin stdout stderr的定义
- stdin,stdout,stderr,生定向到文件
- 验证stderr stdout stdin 缓冲类型和缓冲区大小 以及在重定向后缓冲类型的改变
- python重定向sys.stdin、sys.stdout和sys.stderr
- stdin,stdout,stderr
- 关于STDIN,STDOUT,STDERR的图解分析
- php的三种CLI常量:STDIN,STDOUT,STDERR
- linux中stdout,stdin,stderr意义
- (文件描述符0、1、2),(stdin、stdout、stderr),(终端设备)这三者之间的关系???
- Bash Shell 之stdin,stdout, stderr以及管道
- 详解C语言中的stdin,stdout,stderr
- 详解stdin,stdout,stderr
- php支持的协议和封装协议和三种CLI常量:STDIN,STDOUT,STDERR