stdin,stdout,stderr
我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用。说到这不得不提及stdin,stdout,stderr。想想,我们在用C去写文件时的操作,File *fp=fopen(),这个fp就是我们向系统申请的,相当于一通往文件的通道。
其实,stdin,stdout,stderr就是这个fp,不过他是随着计算机系统的开启默认打开的,其中0就是stdin,表示输入流,指从键盘输入,1代表stdout,2代表stderr,1,2默认是显示器。printf()其实就是向stdout中输出,等同于fprintf(stdout,“****”),perror()其实就是向stderr中输出,相当于fprintf(stderr,“***”),那到底stdout,和stderr有什么区别和作用呢?
我们在写程序时用printf()是为了我们能监控我们的程序运行状况,或者是说debug,如果我们的程序是一直运行,不停下来,我们不可能时刻盯着屏幕去看程序输出,这时我们就可以用文件重定向。将输出到一文件中,我们以后就可以看这文件就行。举个例子,test.c
[cpp] view plain copy
1. <pre class="cpp" name="code">#include<stdio.h>
2.
3. int main()
4. {
5. printf("stdout Helo World!!\n");
6.
7. return 0;
8. }
编译过后,我们./test > test.txt(默认是将stdout里的内容重定向到文件中),这样就把test程序输出的内容输出到test.txt文件中。还有一种更明晰的写法./test 1>test.txt,这里的1就代表stdout。说到这你应该知道stderr该怎样处理了。再举个例子test.c:
[cpp] view plain copy
1. #include<stdio.h>
2.
3. int main()
4. {
5. printf("Stdout Helo World!!\n");
6. fprintf(stdout,"Stdout Hello World!!\n");
7. perror("Stderr Hello World!!\n");
8. fprintf(stderr,"Stderr Hello World!!\n");
9.
10. return 0;
11. }
编译过后,./test,屏幕上是四条输出,如果./test > test.ext ,结果是屏幕上输出两条Stderr Hello World!!,Stdout Helo World!!在文件test.txt中,基于上面说的很容易理解现在的结果,于是我们可以随便处理我们想要的输出,例如:
./test 1>testout.txt 2>testerr.txt,我们将stdout输出到文件testout.txt中,将stderr输出到testerr.txt文件中;
./test 1>testout.txt ,将stdout输出到文件testout.txt 中,stderr输出到屏幕上;
./test 2>testerr.txt,将stderr输出到文件testerr.txt中,stdout输出到屏幕上;
./test > test.txt 2>&1,这是将stdout和stderr重定向到同一文件test.txt文件中。
如果我们不想看到输出内容,既不想在屏幕上看见,也不想重定向到文件中,别担心,万能的Linux有解决办法,./test > /dev/zero 2>&1,这样就看不到任何输出了。
Note:stderr,和stdout还有重要一点区别,stderr是没有缓冲的,它立即输出,而stdout默认是行缓冲,也就是它遇到‘\n’,才向外输出内容,如果你想stdout也实时输出内容,那就在输出语句后加上fflush(stdout),这样就能达到实时输出的效果。
转载于微信公众号 嵌入式ARM
stdin,stdout,stderr相关推荐
- 详解stdin,stdout,stderr
我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用.说到这不得不提及stdin,stdout,stderr.想想,我们在用C去写文件时的操作,Fil ...
- stdin和stdout用法c语言,C语言中的stdin,stdout,stderr
我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用.说到这不得不提及stdin,stdout,stderr.想想,我们在用C去写文件时的操作,Fil ...
- 详解C语言中的stdin,stdout,stderr
我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用.说到这不得不提及stdin,stdout,stderr.想想,我们在用C去写文件时的操作,Fil ...
- 如何将stdin、stdout、stderr重定向到/dev/null
如何将stdin.stdout.stderr重定向到/dev/null Q: 我使用了如下代码将stdin.stdout.stderr重定向到/dev/null freopen( "/dev ...
- php stderr,php标准输入与输出(STDIN、STDOUT、STDERR)
例子,phpinput脚本cmd终端 复制代码 代码示例: // ask for input fwrite(stdout, "enter your name: "); // get ...
- 怎样在windows环境中启动某控制台程序并改变它的stdin、stdout和stderr? http://book.77169.org/ask18/how106297.htm
? MSDN里面有一些文档可以看看,方法是利用CreateProcess的 LPSTARTUPINFO 参数, 设置dwFlags为STARTF_USESTDHANDLES: 然后自定义: HANDL ...
- stdin、stdout、stderr和STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO的区别和联系
转载自:https://blog.csdn.net/yeyuangen/article/details/6781999 1.STDIN_FILENO的作用: ①STDIN_FILENO属于系统API接 ...
- STDOUT和STDERR,以及它们的重定向
它们都是Linux系统的标准文件 在Linux系统中,有3个标准的文件,它们分别占据了文件编号: 0,STDIN,标准输入文件. 1,STDOUT,标准输出文件. 2,STDERR,标准错误文件. 它 ...
- linux下的各个语言中stdin,stdout和stderr理解
在linux中经常会看到stdin,stdout和stderr,这3个可以称为终端(Terminal)的标准输入(standard input),标准输出( standard out)和标准错误输出( ...
最新文章
- 物联网概念升级,万物互联来袭
- 微软自拍:让黑科技拯救不会拍照的你
- 【数据结构与算法】拓扑排序问题C语言实现
- 《人月神话》:焦油坑
- Godot Shader:无需建模用一张图片在Godot中生成一座山
- 个人开发者可以申请微信支付了
- jquery+ajax+ashx。ashx的使用方法
- 基于vue商品图片轮播和放大镜的方案
- 快手如何搭建一个好的数据指标体系?
- python实现京东秒杀
- IAR集成开发环境中无法设置断点的问题
- 云厂商下一块必争之地就是它了!
- Google Android Developer
- 使用Docker搭建高可用Mysql数据库集群
- 不使用yocto搭建 i.MX8QXP Linux 4.14.98_ga 板级开发包编译环境,单步编译
- 进程间的通信--无名管道
- ARChon 分析之五 : chrome-app的开发方法
- ADS(Arm Developer Suite)安装的坑!
- All elements are null 解决方法
- 摩托车方向指示传感器MST1660