流与缓冲

Posted L的存在

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流与缓冲相关的知识,希望对你有一定的参考价值。

1 目的:

  为了使程序的运行效率最高,流对象通常提供缓冲区来减少调用系统I/O库函数的次数。

2 三大缓冲:

  全缓冲:缓冲区满才调用系统I/O函数。对于读操作,知道读取的字节数等于了缓冲区大小或者说到了文件的末尾,才进行实际的I/O操作。

  行缓冲:直到遇到了\'\\n\'才调用I/O库函数。注意,因为缓冲区大小是有限制的,所以一旦缓冲满了也没有遇到\\n,仍然会进行实际的I/O操作。标准输入stdin和stdout默认为行缓冲

  无缓冲:数据立即读入或者输出到外存文件或者设备。stderr是无缓冲的,这样可以实时的保证错误的提示并反馈给客户。

3 三个缓冲分别定义了三个宏:使用方法:缓冲标志和宏做与操作 如果结果为1那么就可直到该缓冲文件流的缓冲区是否是属于该类型了。

  

4 例子:得到文件流的缓冲区类型。输出标准输出 标准输入和标准出错三个文件描述符的缓冲区类型 大小等信息

 1 #include <stdio.h>
 2 int main(void)
 3 {    
 4     printf("stdin is ");
 5     if(stdin->_flags & _IO_UNBUFFERED) /* 判断标准输入流对象的缓冲区类型*/
 6         printf("unbuffered\\n");
 7     else if(stdin->_flags & _IO_LINE_BUF)
 8         printf("line-buffered\\n");
 9     else
10         printf("fully-buffered\\n");
11     printf("buffer size is %d\\n", stdin->_IO_buf_end - stdin->_IO_buf_base); /* 输出缓冲区的大小 */
12     printf("discriptor is %d\\n\\n", fileno(stdin)); /* 输出文件描述符 */
13     printf("stdout is ");
14     if(stdout->_flags & _IO_UNBUFFERED) /* 判断标准输出流对象的缓冲区类型*/
15         printf("unbuffered\\n");
16     else if(stdout->_flags & _IO_LINE_BUF)
17         printf("line-buffered\\n");
18     else
19         printf("fully-buffered\\n");
20     printf("buffer size is %d\\n", stdout->_IO_buf_end - stdout->_IO_buf_base); /* 输出缓冲区的大小 */
21     printf("discriptor is %d\\n\\n", fileno(stdout)); /* 输出文件描述符 */
22     printf("stderr is ");
23     if(stderr->_flags & _IO_UNBUFFERED) /* 判断标准出错流对象的缓冲区类型*/
24         printf("unbuffered\\n");
25     else if(stderr->_flags & _IO_LINE_BUF)
26         printf("line-buffered\\n");
27     else
28         printf("fully-buffered\\n");
29     printf("buffer size is %d\\n", stderr->_IO_buf_end - stderr->_IO_buf_base); /* 输出缓冲区的大小 */
30     printf("discriptor is %d\\n\\n", fileno(stderr)); /* 输出文件描述符 */
31     return 0;
32 }

5 截图

 

以上是关于流与缓冲的主要内容,如果未能解决你的问题,请参考以下文章

Java基础—IO小结缓冲流与其它流的使用

java-IO流(正常IO流与缓冲流分析)

字符缓冲流,properties类,序列化流与反序列化流,打印流

Java学习笔记6.2.1 字符流 - 文件字符流与缓冲字符流

Java学习笔记6.2.1 字符流 - 文件字符流与缓冲字符流

缓冲流