stderr,stdin,stdout详解

来源:互联网 发布:红色警戒mac版种子 编辑:程序博客网 时间:2024/05/01 05:00

1.先看3个函数:

int printf(const char *format, ...);

标准输出函数,在屏幕上打印出一段字符串来

int sprintf(char *str, const char *format, ...);

把格式化的数据写入到某个字符串中。返回值字符串的长度

int fprintf(FILE *stream, const char *format, ...);

fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件


2.再来看这三个文件

这几个文件在程序运行中,默认一直是打开的

stdin标准输入(设备)文件,比如键盘

stdout标准输出(设备)文件,默认向屏幕输出

stderr标准错误(设备)文件,默认向屏幕输出

默认向屏幕输出,stdout和stderr区别在哪?

1.举个例子,让我们来看个题目:

问题:下面程序的输出是什么?(intel笔试2011)

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

解答:这段代码的输出是什么呢?你可以快速的将代码敲入你电脑上(当然,拷贝更快),然后发现输出是

World!Hello

这是为什么呢?在默认情况下,stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。而stderr是无缓冲的,会直接输出,举例来说就是printf(stdout, "xxxx") 和 printf(stdout, "xxxx\n"),前者会憋住,直到遇到新行才会一起输出。而printf(stderr, "xxxxx"),不管有么有\n,都输出。

2.再来看一个例子

#include <stdio.h>int main(){fprintf(stderr, "Can't open it!\n"); fprintf(stdout, "Can't open it!\n"); printf("Can't open it!\n"); }

输出有什么区别吗?
有区别,两者默认向屏幕输出。 
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。 

编译运行:


转向标准输出到磁盘文件test.txt



原创粉丝点击