我们在写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

<pre class="cpp" name="code">#include<stdio.h>int main()
{printf("stdout Helo World!!\n"); return 0;
}

编译过后,我们./test > test.txt(默认是将stdout里的内容重定向到文件中),这样就把test程序输出的内容输出到test.txt文件中。还有一种更明晰的写法./test  1>test.txt,这里的1就代表stdout。说到这你应该知道stderr该怎样处理了。再举个例子test.c:

#include<stdio.h>int main()
{printf("Stdout Helo World!!\n");fprintf(stdout,"Stdout Hello World!!\n");perror("Stderr Hello World!!\n");fprintf(stderr,"Stderr Hello World!!\n");return 0;
}

编译过后,./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),这样就能达到实时输出的效果。

详解stdin,stdout,stderr相关推荐

  1. linux 输出重定向_Linux--文件描述符和stdin,stdout,stderr

    基本概念 1. 文件描述符 总览: 当一个程序成功向操作系统请求访问一个打开的文件, 内核会返回一个指向内核中全局文件表(global file table)中的入口点(entry)的文件描述符. 文 ...

  2. 利用stdin stdout stderr及POSIX-linux机制重定向写日志

    利用stdin stdout stderr及POSIX-linux机制重定向写日志 由open返回的文件描述符一定是该进程尚未使用的最小描述符.由于程序启动时自动打开文件描述符0.1.2,因此第一次调 ...

  3. C语言调试技巧:stdin,stdout,stderr

    stdin,stdout,stderr流 介绍 stdin,stdout,stderr是标准的输入输出流.其中,stdin是访问键盘输入,stdout和stderr分别是向终端输出数据. 关键函数 f ...

  4. WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)

    WorkerMan中work.php中 resetStd 方法中代码如下 public static function resetStd(){if (!static::$daemonize || st ...

  5. stdin, stdout, stderr

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.pandas是什么? 二.使用步骤 1.引入库 2.读入数据 总结 前言 在通常情况下,Linux/UNIX每个程 ...

  6. Linux Shell 文件描述符 及 stdin stdout stderr 重定向

    Abstract: 1) Linux Shell 命令的标准输入.标准输出.标准错误,及其重定位: 2)Linux Shell 操作自定义文件描述符: 文件描述符是与文件相关联的一些整数,他们保持与已 ...

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

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

  8. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  9. python之sys模块详解_(转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

最新文章

  1. 开发工具之Android Studio快捷键
  2. Java中使用Jedis连接Redis数据库流程
  3. android 图片变颜色代码,Android -对图片Drawable进行变色
  4. 单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作...
  5. php获取html选择日期_php获取远程页面html状态码的方法
  6. 11.TCP/IP 详解卷1 --- UDP:用户数据报协议
  7. k开头的英文单词计算机专业,带有k的英语单词
  8. 2019新买电脑必备软件
  9. 操作系统实验七:动态分区分配方式的模拟
  10. 【今日小记】程序员的孤独,没人懂
  11. 如何利用github打造博客专属域名
  12. 华为服务器虚拟云主机,虚拟云主机和虚拟云服务器
  13. GEE(Google Earth Engine) 代码学习笔记一 快速入门
  14. pandas统计表格中politics列字符个数
  15. x轴z轴代表的方向图片_x y z三个轴的方向 x轴、y轴和z轴分别代表的是什么?
  16. Nginx 的安装配置
  17. python迭代是什么意思_如何理解python中的迭代
  18. python扩散模拟_扩散模拟 - 问答 - Python中文网
  19. 计算机windows7桌面管理,windows7桌面图标【管理要领】
  20. 江西理工大学南昌校区排名赛 C: 单身狗的地图游戏

热门文章

  1. MySQL免安装版,安装成服务,开机自启动
  2. Raynger 3i Plus 高温手持式红外测温仪具体型号
  3. FormatFactory3.zip 格式工厂(视频格式转换avi-mpg) live555 media server need mpg,vlc
  4. 浙大版《Python 程序设计》题目集 第2章-14 求整数段和
  5. Go语言中结构体打Tag是什么意思?
  6. 敏捷教练----Scrum-冲刺
  7. 解决系统d3dx9_43.dll丢失问题
  8. ssm+java计算机毕业设计基于java的仓库管理系统9rew6(程序+lw+源码+远程部署)
  9. linux卸载metasploit,Linux安装Metasploit
  10. 威联通NAS(QNAP)采用HybridMount挂载百度云网盘