zoukankan      html  css  js  c++  java
  • C语言缓冲区

    定义

    缓冲区是内存空间的一部分,用于缓冲输入或输出的数据。根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

    类型

    缓冲区分为三种类型:全缓冲、行缓冲和不带缓冲。

    1.全缓冲

    在这种情况下,当填满标准I/O缓存后才会进行实际的I/O操作。典型代表是对磁盘文件的读写。

    2.行缓冲

    输入的字符先放入缓冲区,遇到换行符时才进行实际的I/O操作。典型代表是标准输入(stdin)和标准输出(stdout)。

    3.不带缓冲

     即不进行缓冲,典型代表是stderr,这样可以使得出错信息尽快显示。

    大部分系统默认使用下列类型的缓存:标准出错是不带缓存的;涉及终端设备的流是行缓存的;其余为全缓存。

    缓冲区的大小

    如果用户没有设置缓冲区,系统会默认为标准输入输出设置缓冲区,大小通常为4096字节。这和计算机中的分页机制有关,每个页的大小为4096字节,因此通常情况下,缓冲区的大小会设置为4096字节。

    缓冲区的刷新

    以下情况会引发缓冲区的刷新:

    1.缓冲区满时;

    2.行缓冲区遇到换行符;

    3.关闭文件;

    4.使用特定函数刷新缓冲区。

    举例

     1 #include<stdio.h>
     2 #include<Windows.h>
     3 int main() {
     4     printf("hello");
     5     int i = 0;
     6     for (; i < 10; i++) {
     7         putchar('a');
     8         Sleep(1000);
     9     }
    10     return 0;
    11 }

    运行该程序,等待10s后,输出helloaaaaaaaaaa。

    这是由于键盘输入是标准的行缓冲,只有遇到换行符或者程序结束后才会输出到屏幕上。

     1 #include<stdio.h>
     2 #include<Windows.h>
     3 int main() {
     4     printf("hello");
     5     fflush(stdout);
     6     int i = 0;
     7     for (; i < 10; i++) {
     8         putchar('a');
     9         Sleep(1000);
    10     }
    11     return 0;
    12 }

    运行该程序,首先输出hello,等待10s后,继续输出aaaaaaaaaa。

    这是由于fflush刷新了缓冲区,所以会首先输出hello。

     

    参考

    https://www.cnblogs.com/pricks/p/3821832.html

    https://blog.csdn.net/ww1473345713/article/details/51713471

  • 相关阅读:
    WIN10下Java环境变量配置
    Oracle中用户的创建和权限设置
    Oracle表空间的创建与删除
    设置RHEL-7.0的运行级别
    发布项目到Tomcat(域名直接访问)
    centos7 打开80端口(网络搜集)
    MySql字符乱码问题解决(真)
    centos7安装workbench
    centos7添加Windows引导
    centos7下yum安装mysql(转)
  • 原文地址:https://www.cnblogs.com/sindy/p/10060316.html
Copyright © 2011-2022 走看看