zoukankan      html  css  js  c++  java
  • 流与缓冲

    1 目的:

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

    2 三大缓冲:

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

      行缓冲:直到遇到了' '才调用I/O库函数。注意,因为缓冲区大小是有限制的,所以一旦缓冲满了也没有遇到 ,仍然会进行实际的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
    ");
     7     else if(stdin->_flags & _IO_LINE_BUF)
     8         printf("line-buffered
    ");
     9     else
    10         printf("fully-buffered
    ");
    11     printf("buffer size is %d
    ", stdin->_IO_buf_end - stdin->_IO_buf_base); /* 输出缓冲区的大小 */
    12     printf("discriptor is %d
    
    ", fileno(stdin)); /* 输出文件描述符 */
    13     printf("stdout is ");
    14     if(stdout->_flags & _IO_UNBUFFERED) /* 判断标准输出流对象的缓冲区类型*/
    15         printf("unbuffered
    ");
    16     else if(stdout->_flags & _IO_LINE_BUF)
    17         printf("line-buffered
    ");
    18     else
    19         printf("fully-buffered
    ");
    20     printf("buffer size is %d
    ", stdout->_IO_buf_end - stdout->_IO_buf_base); /* 输出缓冲区的大小 */
    21     printf("discriptor is %d
    
    ", fileno(stdout)); /* 输出文件描述符 */
    22     printf("stderr is ");
    23     if(stderr->_flags & _IO_UNBUFFERED) /* 判断标准出错流对象的缓冲区类型*/
    24         printf("unbuffered
    ");
    25     else if(stderr->_flags & _IO_LINE_BUF)
    26         printf("line-buffered
    ");
    27     else
    28         printf("fully-buffered
    ");
    29     printf("buffer size is %d
    ", stderr->_IO_buf_end - stderr->_IO_buf_base); /* 输出缓冲区的大小 */
    30     printf("discriptor is %d
    
    ", fileno(stderr)); /* 输出文件描述符 */
    31     return 0;
    32 }

    5 截图

  • 相关阅读:
    MJRefreshFooterView
    UIActionSheet
    UIAlertView带textField
    SIAlertView
    旋转 锚点
    centos7.2 Apache+PHP7.2+Mysql5.6环境搭建
    ubuntu16.04 mysql 开启远程连接
    Ubuntu16.04重新安装MySQL数据库
    Ubuntu16.04彻底卸载MySQL
    laravel框架基础(2)---laravel项目加载机制
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/7193159.html
Copyright © 2011-2022 走看看