Linux Advance--打印标准IO流缓冲状态信息

在打印缓冲状态信息之前,先对每个流执行IO操作,第一个IO操作通常就造成为该流分配缓冲。结构成员 _IO_file_flags,_IO_buf_base,_IO_buf_end 和常量 _IO_UNBUFFERED, _IO_LINE_BUFFERED 是由Linux中的GNU标准IO库定义的。


#include <stdio.h>

void	pr_stdio(const char *, FILE *);

int main()
{
    FILE	*fp;

	fputs("enter any character\n", stdout);
	if (getchar() == EOF) {
		printf("getchar error\n");
		exit(1);
	}
	fputs("one line to standard error\n", stderr);

	pr_stdio("stdin", stdin);
	pr_stdio("stdout", stdout);
	pr_stdio("stderr", stderr);

	if ((fp = fopen("./main.c", "r")) == 0) {
		printf("fopen error\n");
		exit(1);
	}
	if (getc(fp) == EOF) {
		printf("getc error\n");
		exit(1);
	}
    pr_stdio("./main.c", fp);
    exit(0);
}

void	pr_stdio(const char *name, FILE *fp)
{
	printf("stream = %s, ", name);

	/*
	 * The following is nonportable.
	 */
	if (fp->_IO_file_flags & _IO_UNBUFFERED)
		printf("unbuffered");
	else if (fp->_IO_file_flags & _IO_LINE_BUF)
		printf("line buffered");
	else /* if neither of above */
		printf("fully buffered");
	printf(", buffer size = %d\n", fp->_IO_buf_end - fp->_IO_buf_base);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值