在打印缓冲状态信息之前,先对每个流执行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);
}