我们在写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相关推荐

  1. 详解stdin,stdout,stderr

    我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用.说到这不得不提及stdin,stdout,stderr.想想,我们在用C去写文件时的操作,Fil ...

  2. stdin和stdout用法c语言,C语言中的stdin,stdout,stderr

    我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用.说到这不得不提及stdin,stdout,stderr.想想,我们在用C去写文件时的操作,Fil ...

  3. 详解C语言中的stdin,stdout,stderr

    我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用.说到这不得不提及stdin,stdout,stderr.想想,我们在用C去写文件时的操作,Fil ...

  4. 如何将stdin、stdout、stderr重定向到/dev/null

    如何将stdin.stdout.stderr重定向到/dev/null Q: 我使用了如下代码将stdin.stdout.stderr重定向到/dev/null freopen( "/dev ...

  5. php stderr,php标准输入与输出(STDIN、STDOUT、STDERR)

    例子,phpinput脚本cmd终端 复制代码 代码示例: // ask for input fwrite(stdout, "enter your name: "); // get ...

  6. 怎样在windows环境中启动某控制台程序并改变它的stdin、stdout和stderr? http://book.77169.org/ask18/how106297.htm

    ? MSDN里面有一些文档可以看看,方法是利用CreateProcess的 LPSTARTUPINFO 参数, 设置dwFlags为STARTF_USESTDHANDLES: 然后自定义: HANDL ...

  7. stdin、stdout、stderr和STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO的区别和联系

    转载自:https://blog.csdn.net/yeyuangen/article/details/6781999 1.STDIN_FILENO的作用: ①STDIN_FILENO属于系统API接 ...

  8. STDOUT和STDERR,以及它们的重定向

    它们都是Linux系统的标准文件 在Linux系统中,有3个标准的文件,它们分别占据了文件编号: 0,STDIN,标准输入文件. 1,STDOUT,标准输出文件. 2,STDERR,标准错误文件. 它 ...

  9. linux下的各个语言中stdin,stdout和stderr理解

    在linux中经常会看到stdin,stdout和stderr,这3个可以称为终端(Terminal)的标准输入(standard input),标准输出( standard out)和标准错误输出( ...

最新文章

  1. 物联网概念升级,万物互联来袭
  2. 微软自拍:让黑科技拯救不会拍照的你
  3. 【数据结构与算法】拓扑排序问题C语言实现
  4. 《人月神话》:焦油坑
  5. Godot Shader:无需建模用一张图片在Godot中生成一座山
  6. 个人开发者可以申请微信支付了
  7. jquery+ajax+ashx。ashx的使用方法
  8. 基于vue商品图片轮播和放大镜的方案
  9. 快手如何搭建一个好的数据指标体系?
  10. python实现京东秒杀
  11. IAR集成开发环境中无法设置断点的问题
  12. 云厂商下一块必争之地就是它了!
  13. Google Android Developer
  14. 使用Docker搭建高可用Mysql数据库集群
  15. 不使用yocto搭建 i.MX8QXP Linux 4.14.98_ga 板级开发包编译环境,单步编译
  16. 进程间的通信--无名管道
  17. ARChon 分析之五 : chrome-app的开发方法
  18. ADS(Arm Developer Suite)安装的坑!
  19. All elements are null 解决方法
  20. 摩托车方向指示传感器MST1660

热门文章

  1. JAVA的SSH框架登录注册
  2. 78.Subsets
  3. C# 从Excel中读取时间数据
  4. 拾遗----javascript一些实用方法
  5. 谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)
  6. 简析EDMX文件的构成 - CSDL、SSDL、MSL
  7. windows Virtualbox下配置Ubuntu,且用ssh连接
  8. Category 的一些事
  9. 陶哲轩实分析 定理 13.1.5
  10. ios 图片添加阴影