C和指针之IO流和缓冲区

来源:互联网 发布:淘宝比较真的法国代购 编辑:程序博客网 时间:2024/06/07 08:19

1、缓冲区介绍

缓冲区又称为缓存,它是内存空间的一部分,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区





2、为什么要缓冲区

从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度,来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作






3、缓冲区的分类

缓冲区的类型
缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。
1) 全缓冲
在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。

2) 行缓冲
在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是标准输入(stdin)和标准输出(stdout)。


3) 不带缓冲
也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。



4、测试Demo

#include <stdio.h>/**程序调用getchar()函数时,程序就等着用户按键,并等用户按下回车键返回。期间按下的字符存放在缓冲区,第一个字符作为函数返回值。继续调用getchar()函数,将不再等用户按键,而>是返回您刚才输入的第2个字符;继续调用,返回第3个字符,直到缓冲区中的字符读完**/int main(){    char c;    //first input    c = getchar();    printf("c is %c\n", c);    while ((c = getchar()) != '\n')    {        printf("c is %c\n", c);    }    return 0;}






5、运行结果

/**1111deMacBook-Pro:Music a1111$ vim getchar.c1111deMacBook-Pro:Music a1111$ gcc -g getchar.c -o getchar1111deMacBook-Pro:Music a1111$ ./getcharchen yuc is cc is hc is ec is nc isc is yc is u**/


阅读全文
0 0
原创粉丝点击