📜  缓冲区与流 (1)

📅  最后修改于: 2023-12-03 15:27:37.294000             🧑  作者: Mango

缓冲区与流

在编程时,缓冲区和流是经常用到的概念。它们可以帮助我们更有效地读取和写入数据。

什么是缓冲区

缓冲区是一个位于内存中的数据块,用于缓存从外部设备(如硬盘、网络、键盘等)读取的数据,以及将数据写入外部设备。缓冲区可以减少程序的输入/输出操作次数,从而提高程序的效率。

缓冲区分为 标准 I/O 缓冲区用户自定义缓冲区。标准 I/O 缓冲区是一种特殊类型的缓冲区,它在标准输入、标准输出和标准错误输出等方面都有应用。

什么是流

流是一个连续的数据序列,从一个源(如键盘、文件、网络等)流向一个目的地(如屏幕、文件、网络等)。流可以使程序员不必关心数据的存储位置和读取方式,只需要使用相应的流函数即可。

在 C 语言中,流分为标准流和用户自定义流。常见的标准流有 stdin(标准输入流)、stdout(标准输出流)和 stderr(标准错误输出流)。

什么是缓冲区流

缓冲区流是结合了缓冲区和流的概念,它可以对数据进行缓存,同时使用流的方式实现读取和写入。在读取文件时,缓冲区流可以一次读取多个字节并存储到缓冲区中。在写入文件时,缓冲区流可以一次写入多个字节,并在缓冲区满后再写入物理磁盘。这样可以减少文件操作的次数,提高程序的效率。

在 C 语言中,常见的缓冲区流有 fgets()、fputs()、fwrite()、fread() 等函数。

代码示例

下面是一个使用缓冲区流读取文件的示例:

#include <stdio.h>
#define BUFFER_SIZE 1024

int main()
{
    char buffer[BUFFER_SIZE];
    FILE *fp = fopen("data.txt", "r");
    int count;

    if (fp == NULL)
    {
        printf("文件打开失败!");
        return 0;
    }

    while (!feof(fp))
    {
        count = fread(buffer, sizeof(char), BUFFER_SIZE, fp);
        fwrite(buffer, sizeof(char), count, stdout);
    }

    fclose(fp);
    return 0;
}

在上述代码中,我们使用了 fread() 函数从文件中读取数据,并使用 fwrite() 函数将缓冲区中的数据输出到屏幕上。通过缓冲区的使用,我们可以让读取和输出操作更加高效。

注:这里使用了stdio.h头文件中的函数i:feof、fopen、fread、fwrite、fclose.