对普通文件流,标准输入,标准输出及标准错误输出流进行了判断。
在进行判断是,使用了STRUCT_IO_FILE中的_FLAGS成员。
1 [root@localhost ccode]# vim buff_type_test.c 2 #include <stdio.h> 3 4 void pr_stdio(const char *, FILE *); 5 6 int main(void) 7 { 8 FILE *fp; 9 fputs("enter andy character\n", stdout); 10 if(getchar() == EOF) 11 printf("getchar error"); 12 fputs("one line to standard error\n", stderr); 13 pr_stdio("stdin", stdin); 14 pr_stdio("stdout", stdout); 15 pr_stdio("stderr", stderr); 16 17 if((fp = fopen("/etc/motd", "r")) == NULL) 18 printf("fopen error"); 19 if(fgetc(fp) == EOF) 20 printf("get error"); 21 pr_stdio("/etc/motd", fp); 22 return (0); 23 } 24 25 void pr_stdio(const char *name, FILE *fp) 26 { 27 printf("stream = %s, ", name); 28 if(fp->_flags & _IO_UNBUFFERED) 29 printf("unbuffered"); 30 else if(fp->_flags & _IO_LINE_BUF) 31 printf("line buffered"); 32 else 33 printf("fully buffered or modified"); 34 printf(",buffer size = %d\n", fp->_IO_buf_end - fp->_IO_buf_base); 35 } 36 37 ~ 38 ~ 39 ~ 40 ~ 41 "buff_type_test.c" 35L, 824C written 42 [root@localhost ccode]# gcc -o buff_type_test buff_type_test.c 43 [root@localhost ccode]# ./buff_type_test 44 enter andy character 45 ytuy 46 one line to standard error 47 stream = stdin, line buffered,buffer size = 1024 48 stream = stdout, line buffered,buffer size = 1024 49 stream = stderr, unbuffered,buffer size = 1 50 get errorstream = /etc/motd, fully buffered or modified,buffer size = 4096