stdin、stdout、stderr

本文详细介绍了标准I/O流的概念,包括stdin、stdout和stderr,并解释了它们的默认行为及如何通过文件描述符进行重定向。此外,还探讨了fprintf与printf的区别,特别是关于缓冲机制的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


printf()直接输出到终端上
fprintf()输出到文件


在进程通信的学习中,多次用到
fprintf(),其中参数多为stdout,stderr。

http://www.cnblogs.com/puputu/archive/2010/06/02/1749769.html


NAME

stdin,stdout,stderr - 标准I/O流

SYNOPSIS览

#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;

通常,每个Unix程序在启动时都会打开三个流,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。

典型的,他们被连接到用户的终端,但是也有可能指向文件或是其他设备。

与流stdin,stdout和stderr关联的整数形式的文件描述符分别是0,1还有2。预处理符号 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO分别以它们为值,定义在<unistd.h>

默认 与 重定位

stdin

默认从终端输入
符号 “< 文件名” 从文件输入

stdout,stderr

默认输出到终端
符号 “> 文件名” 输出到文件

Example

//先用gcc编译文件,得到目标文件
$ gcc e.o example.c
$ ./e.o > file.txt

扩展

错误流 stderr 是非缓冲的
输出流 stdout 是行缓冲的

问题如下:

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,都输出。
(http://blog.sina.com.cn/s/blog_912673ce01013qq9.html)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值