详解C语言中的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),这样就能达到实时输出的效果。
详解C语言中的stdin,stdout,stderr相关推荐
- php seekdir,C++_详解C语言中telldir()函数和seekdir()函数的用法,C语言telldir()函数:取得目录流 - phpStudy...
详解C语言中telldir()函数和seekdir()函数的用法 C语言telldir()函数:取得目录流的读取位置头文件: #include 定义函数: off_t telldir(DIR *dir ...
- c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别
详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...
- c语言while函数作用,详解C语言中的while语句
什么是C语言的while语句?它的作用是什么呢?估计很多初学者对此都是一知半解.下面课课家笔者就为大家详细解释C语言中的while语句的含义和作用. 首先笔者先给大家介绍C语言中的共有的三大常用的程序 ...
- c语言中的fscanf是啥意思,详解C语言中fgets和fscanf区别
fscanf函数是C语言的文件格式读取函数的方法之一,它使用空格.制表符和回车来分割不同的单词,这样可以让我们使用起来更方便,下面就让爱站技术频道小编带你来学习详解C语言中fgets和fscanf区别 ...
- C语言中定义常量的关键字是什么,C++_详解C语言中const关键字的用法,关键字const用来定义常量,如 - phpStudy...
详解C语言中const关键字的用法 关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const ...
- 详解C语言中sizeof的使用
目录 一.sizeof是什么? 二.sizeof的使用 三. 在字符串数组中sizeof与strlen的区别 四.总结 一.sizeof是什么? 在 C /C++语言中,sizeof() 是一个判断数 ...
- 在c语言中如何将char型变量转换为int型变量,详解C语言中的char数据类型及其与int类型的转换...
C语言中的char变量 char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed.虽然char在标准中是unsig ...
- c语言rand函数的作用,详解C语言中rand函数的使用
前言 我们在编程实现算法的过程中,往往需要使用到随机数.由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?).所以计算机生成的是伪随机数,供我们使用. 我们使用C语言的ran ...
- 详解c语言中的qsort函数(有图)
目录 目录 一.qsort函数是什么 1.自定义冒泡函数时遇到的问题 2.qsort函数的作用 (1)int整形数组排序(2)浮点型数组排序(3)字符数组排序 (4)结构体排序 二.qsort函数的原 ...
最新文章
- Python读取保存在hdf5文件中的脑电数据
- php透明颜色的代码,PHP 透明水印生成代码参考
- 利用Facebook开源项目来赚钱不再只是梦
- C++ 暂停Windows文件保护
- [转]JS获取当前对象大小以及屏幕分辨率等
- 搭建服务器Apache+PHP+MySql需要注意的问题
- .NET基金会讨论 .NET 开源事业之路
- MySQL流浪记(七)—— MySQL删除表数据
- 28-33Linux目录指令
- EMC -- Windows下卸载 Content Server
- 如何理解和应用Java的多态
- [SUCTF 2018]GetShell
- win10常用快捷键及命令行
- PAT 1124 Raffle for Weibo Followers
- Monyer's Game 0~5关过关方法
- GBase XDM C API 代码示例
- 在线教育软件开发的目的是什么?
- 手写数字的分割和识别
- echarts如何在json地图上设置多种颜色的点位和自定义背景弹出框
- 俞敏洪在同济大学的惊天动地的演讲