C语言中的stdin,stdout,stderr[转]

摘要:
说到这里,我们不得不提到stdin、stdout和stderr。事实上,stdin、stdout和stderr是fps,但它们在默认情况下是在打开计算机系统时打开的。其中,0是stdin,表示输入流,表示来自键盘的输入,1表示stdout,2表示stderr,1,2表示默认显示。Printf()实际上输出到stdout,相当于fprintf。perror()实际上输出到stderr,这相当于fprintf。stdout和stderr之间的区别和作用是什么?另一个例子是测试。c: 1.#include 2.3.int main()4.{5.printf(“StdoutHeloWorld!!

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

1. #include<stdio.h>  

2.   

3. int main()  

4. {  

5.      printf("stdout Helo World!! ");   

6.   

7.      return 0;  

8. }  

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

1. #include<stdio.h>  

2.   

3. int main()  

4. {  

5.      printf("Stdout Helo World!! ");  

6.      fprintf(stdout,"Stdout Hello World!! ");  

7.      perror("Stderr Hello World!! ");  

8.      fprintf(stderr,"Stderr Hello World!! ");  

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默认是行缓冲,也就是它遇到‘ ’,才向外输出内容,如果你想stdout也实时输出内容,那就在输出语句后加上fflush(stdout),这样就能达到实时输出的效果。

 C语言中的stdin,stdout,stderr[转]第1张

C语言中的stdin,stdout,stderr[转]第2张

 C语言中的stdin,stdout,stderr[转]第3张

免责声明:文章转载自《C语言中的stdin,stdout,stderr[转]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇孤荷凌寒自学python第十七天初识Python的函数weblogic9.0中数据源配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DockerFile与镜像(Image)仓库

深入Docker 之 Image: 当我们使用docker pull mysql 这个命令获取镜像的时候,到底他是怎么做的?我们登录官方提供的仓库看一下 https://github.com/docker-library. 我们搜索mysql并且选择对应的版本,比如 5.7 我们会看到改目录下只有两个文件,其中最重要的则是这个Dockerfile 文件了...

mysql和Oracle在对clob和blob字段的处理

一、MySQL与Oracle数据库如何处理Clob,Blob数据类型 (1)不通数据库中对应clob,blob的类型如下: MySQL中:clob对应text,blob对应blob DB2/Oracle中:clob对应clob,blob对应blob (2)domain中对应的类型: clob对应String,blob对应byte[] clob对应ja...

R语言中duplicated函数:去重复,取重复

1、创建测试数据 > test <- c(1,2,3,1,1,2,5) ##创建向量测试数据> test[1] 1 2 3 1 1 2 5> duplicated(test) ## 基本用法,返回逻辑值,非重复为F,重复为T[1] FALSE FALSE FALSE TRUE TRUE TRUE FALSE> 2、对向量去重复...

CSS3 基础(1)——选择器详解

 CSS3选择器详解 一、 属性选择器   在CSS3中,追加了三个属性选择器分别为:[att*=val]、[att^=val]和[att$=val],使得属性选择器有了通配符的概念。 选择器 示例 描述 [attribute^=value] [src^="https"] 选择每一个src属性的值以"https"开头的元素 [attribute...

Spring 远程调用工具类RestTemplateUtils

Spring 远程调用Rest服务工具类,包含Get、Post、Put、Delete四种调用方式。 依赖jar <dependency> <groupId>org.springframework</groupId> <artifactId>s...

深入理解计算机系统2

第二章 信息的表示和处理 2.1 信息存储 大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的内存单位,而不是访问内存中单独的位.机器级程序将内存视为一个非常大的字节数组,称为虚拟内存(virtual memory).内存的每个字节都由一个唯一的数字来标识,称为它的地址(ad-adress),所有可能地址的集合就成为虚拟地址空间(vir...