stdin,stderr,stdout

在此之前先区分一下:printf,sprintf,fprintf。

1、printf就是标准输出,在屏幕上打印出一段字符串来。

#include <stdio.h>

原型:void printf(const char
*format,[argument]);

功能:一般用于向标准输出设备按规定格式输出信息。

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

#include <stdio.h>

原型:int sprintf( char
*buffer, const char *format, [ argument] … );

功能:把格式化的数据写入某个字符串缓冲区。

3、fprintf是用于文件操作。

#include <stdio.h>

原型:int fprintf(FILE *stream,char *format,[argument]);

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

4、stdout, stdin, stderr的中文名字分别是标准输出,标准输入和标准错误。

  • 标准输入是程序可以读取其输入的位置。缺省情况下,进程从键盘读取 stdin 。
  • 标准输出是程序写入其输出的位置。缺省情况下,进程将 stdout 写到终端屏幕上。
  • 标准错误是程序写入其错误消息的位置。缺省情况下,进程将 stderr 写到终端屏幕上。

定义位置

#include <stdio.h>

extern FILE *stdin;

extern FILE *stdout;

extern FILE *stderr;

stdout -- 标准输出设备 (printf("..")) 同 stdout。

stderr -- 标准错误输出设备

我们知道,标准输出和标准错误默认都是将信息输出到终端上,那么他们有什么区别呢?让我们来看个题目:

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

int main(){

fprintf(stdout,"Hello ");

fprintf(stderr,"World!");

return0;

}

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

World!Hello

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

2,fprintf(stderr, "Can‘t open it!\n");

fprintf(stdout, "Can‘t open it!\n");

printf("Can‘t open it!\n");

这3句效果不是一样啊,有什么区别吗?

有区别。

stdout -- 标准输出设备 (printf("..")) 同 stdout。

stderr -- 标准错误输出设备

两者默认向屏幕输出。

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

例如:

my.exe

Can‘t open it!

Can‘t open it!

Can‘t open it!

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

my.exe > tmp.txt

Can‘t open it!

用TYPE 看 tmp.txt的内容:

TYPE tmp.txt

Can‘t open it!

Can‘t open it!但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 02:16:39

stdin,stderr,stdout的相关文章

C++ stderr/stdout 重定向到文件

通常,stderr和stdout被用来输出内容显示到屏幕,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅.最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件. stderr/stdout 重定向到文件 这里以stderr代码说明. #include <stdio.h> #include <stdlib.h> int main( void ) { FILE *stream = freopen( "freopen.out", &qu

stdin、stdout、stderr

1 stdin键盘 2 stdout显示器 3 stderr错误 1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 6 main() 7 { 8 //stderr始终在显示器,如果重定向,stdout会被写入磁盘 9 //遇到错误,就可以把错误信息写入stderr,会自动在显示器上输出 10 11 fprintf(stderr, "stderr你遇到的错误是%s,重

Windows管道与StdIn、StdOut重定向

stdin是标准输入,stdout是标准输出,stderr是标准错误输出.大多数的命令行程序从stdin输入,输出到stdout或stderr,有时我们需要重定向stdout,stderr,stdin.比如:将输出写入文件,又或者我们要将命令行程序输出结果显示到Windows对话框中. 在Windows编程中,重定向需要用到管道(Pipe)的概念.管道是一种用于在进程间共享数据的机制.一个管道类似于一个管子的两端,一端是写入的,一端是读出的.由一个进程从写入端写入.另一个进程从读出端读出,从而实

stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO

stdin,stdout 等类型为 FILE *. STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO 等类型为 int. 使用 FILE * 的函数主要有:fopen.fread.fwrite.fclose等,基本上都以 f 开头. 使用 STDIN_FILENO 等的函数有:open.read.write.close等. stdin 等属于标准 I/O,高级的输入输出函数,定义在 <stdio.h>. STDIN_FILENO 等是文件描述符,是非负整数,一般

stderr,stdout,a.txt缓冲区别

#include<stdlib.h>#include<stdio.h>#include<string.h>#include<error.h>#include<errno.h>#include<unistd.h>#include<strings.h>#include<stdbool.h> #include<sys/stat.h>#include<sys/types.h>#include&l

7-zip的标准输入输出(STDIN,STDOUT)与Ncat的配合使用,压缩后传输文件

Netcat/Ncat是很好用的网络工具,使用方法网上已经有很多文章讲解了,不再赘述.本文讲述用7-zip配合Ncat,实现从A机器到B机器的文件压缩传输.也就是说,准备发送的文件先在A机器上压缩,再把压缩之后的数据传送到B机器,在B机器实时解压缩,整个的传输过程对用户来说是透明的.因为流量减小了,网传速度可能得以加快.之所以说"可能",是因为压缩后传输速度是否得以加快,取决于CPU速度与网络速度之比.如果CPU慢而网速快,那还不如不压缩.如果出现这种情况,就当本文是一片纯技术探讨文把

做uart 实验时,run configure 只能选择jtag_uart 而没有uart

使用的是nios ii 13 版本.直接在nios 软件上运行时程序能够执行,其中已经配置了stdin stderr stdout为jtag_uart.run configure 里面的byte stream device 自动选择jtag_uart.改变程序与stdin stdout stderr 为uart 后,在run configure 里面无法选择uart 不出现uart 选项.所以在直接下载后只能够输出信息,而不能获得输入的信息.. 问题为得到解决....  

第一天----fclose

http://blog.csdn.net/qin9r3y/article/details/8652207 /*  了解C语言的存储*/ 前一节fopen的返回值FILE *类型的指针是放在堆上 如果一个函数的返回值是指针并且有逆操作的时候,那么返回值的指针一定是在堆上的 如果一个函数的返回值是指针没有逆操作的时候,那么返回值的指针可能是在堆上也可能在静态区 int fclose(FILE *fp); 参数:流 返回值:成功0 : 失败EOF默认为-1. #include <stdio.h> #

vs2015无法解析外部符号__imp__fprintf

使用vs2015编译ffmpeg的一个小项时,出现了__imp__fprintf和__imp____iob_func 的错误,google了一下,有的人 建议下载SDL源码重新编译一下,当然这个方案非常不科学.所以又继续搜,终于有所发现. 这是老外的原话: In visual studio 2015, stdin, stderr, stdout are defined as follow : #define stdin (__acrt_iob_func(0)) #define stdout (_