我们在写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),这样就能达到实时输出的效果。

详解C语言中的stdin,stdout,stderr相关推荐

  1. php seekdir,C++_详解C语言中telldir()函数和seekdir()函数的用法,C语言telldir()函数:取得目录流 - phpStudy...

    详解C语言中telldir()函数和seekdir()函数的用法 C语言telldir()函数:取得目录流的读取位置头文件: #include 定义函数: off_t telldir(DIR *dir ...

  2. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...

  3. c语言while函数作用,详解C语言中的while语句

    什么是C语言的while语句?它的作用是什么呢?估计很多初学者对此都是一知半解.下面课课家笔者就为大家详细解释C语言中的while语句的含义和作用. 首先笔者先给大家介绍C语言中的共有的三大常用的程序 ...

  4. c语言中的fscanf是啥意思,详解C语言中fgets和fscanf区别

    fscanf函数是C语言的文件格式读取函数的方法之一,它使用空格.制表符和回车来分割不同的单词,这样可以让我们使用起来更方便,下面就让爱站技术频道小编带你来学习详解C语言中fgets和fscanf区别 ...

  5. C语言中定义常量的关键字是什么,C++_详解C语言中const关键字的用法,关键字const用来定义常量,如 - phpStudy...

    详解C语言中const关键字的用法 关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const ...

  6. 详解C语言中sizeof的使用

    目录 一.sizeof是什么? 二.sizeof的使用 三. 在字符串数组中sizeof与strlen的区别 四.总结 一.sizeof是什么? 在 C /C++语言中,sizeof() 是一个判断数 ...

  7. 在c语言中如何将char型变量转换为int型变量,详解C语言中的char数据类型及其与int类型的转换...

    C语言中的char变量 char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed.虽然char在标准中是unsig ...

  8. c语言rand函数的作用,详解C语言中rand函数的使用

    前言 我们在编程实现算法的过程中,往往需要使用到随机数.由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?).所以计算机生成的是伪随机数,供我们使用. 我们使用C语言的ran ...

  9. 详解c语言中的qsort函数(有图)

    目录 目录 一.qsort函数是什么 1.自定义冒泡函数时遇到的问题 2.qsort函数的作用 (1)int整形数组排序(2)浮点型数组排序(3)字符数组排序 (4)结构体排序 二.qsort函数的原 ...

最新文章

  1. Python读取保存在hdf5文件中的脑电数据
  2. php透明颜色的代码,PHP 透明水印生成代码参考
  3. 利用Facebook开源项目来赚钱不再只是梦
  4. C++ 暂停Windows文件保护
  5. [转]JS获取当前对象大小以及屏幕分辨率等
  6. 搭建服务器Apache+PHP+MySql需要注意的问题
  7. .NET基金会讨论 .NET 开源事业之路
  8. MySQL流浪记(七)—— MySQL删除表数据
  9. 28-33Linux目录指令
  10. EMC -- Windows下卸载 Content Server
  11. 如何理解和应用Java的多态
  12. [SUCTF 2018]GetShell
  13. win10常用快捷键及命令行
  14. PAT 1124 Raffle for Weibo Followers
  15. Monyer's Game 0~5关过关方法
  16. GBase XDM C API 代码示例
  17. 在线教育软件开发的目的是什么?
  18. 手写数字的分割和识别
  19. echarts如何在json地图上设置多种颜色的点位和自定义背景弹出框
  20. 俞敏洪在同济大学的惊天动地的演讲

热门文章

  1. 自媒体时代,我们该怎么做好自媒体
  2. 今日头条如何定位自己的领域?!小白需要注意一下几点!
  3. Chrome浏览器打开网页慢的解决方案
  4. 大语言模型-中文Langchain
  5. 解密RimWorld环世界地形数据
  6. 心中有佛,看人如佛;心中有魔,看人如魔。
  7. 什么是软件质量?(解决你的迷茫)
  8. 浅析电商会员中台体系
  9. 【已解决】Springboot服务 Netty启动报错Failed to submit a listener
  10. 万国编码unicode