Linux-缓冲区(简单理解)

1. 缓冲区是什么

缓冲区就是一段内存空间。

2. 为什么要有缓冲区

IO写入有两种:

  • 写透模式(WT) 成本高,效率低
  • 写回模式(WB) 成本低,效率高

写透模式:每次的文件写入都要立即刷新到文件所在的磁盘上,一次不论写多少大小的内容。

写回模式:先把内容存下来,存到缓冲区中,等到到了一定条件,再统一刷新到磁盘上

因为磁盘是电脑上的一个外设,也是唯一的机械设备,对其的读写速度相当慢,而内存相比磁盘是相当快的,所以如果采用写透模式,就会拖慢计算机的整体效率

写回模式采取一定的刷新策略:1.立即刷新 2.行刷新(\n),3. 满刷新,

对应的特殊情况:1. 用户强制退出, 2. 进程退出

3. 缓冲区在哪里

那么缓冲区在哪里呢?

谁提供的函数接口,谁就要提供缓冲区的实现,缓冲区在哪里也就有根据了

比如c语言的fprintf(),就有对应的缓冲区,缓冲区由c标准库提供,他会在用户空间定义一块空间作为缓冲区。准确的说,就是在FILE结构体中

操作系统的接口write也有对应的缓冲区,在内核空间。

c语言层面的缓冲区,最后还是要给内核空间的缓冲区,c++缓冲区要给c语言的缓冲区,所以一般越底层的接口,速度越快。

// 测试IO接口
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    close(1);
    int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
    if (fd < 0)
    {
        perror("open");
        return 1;
    }

    printf("print\n");
    fprintf(stdout, "fprintf\n");
    fputs("fputs\n", stdout);
    write(fd, "write\n", sizeof "write\n");
    perror("perror");

    // fflush(stdout);
    // close(fd);
    fork();
}

 没有fflush文件log.txt的内容

fflush后文件的内容

我们发现两次打印的内容不同,其中c语言的函数接口都打印了两次,而系统的打印接口只有一次

这是为什么呢?

fork创建子进程会在用户空间上刷新的时候会发生写时拷贝,缓冲区的内容也会拷贝一份,再刷新的时候就会有两份内容,而write属于内核级的内存空间,并没有影响。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 07:14:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 07:14:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 07:14:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 07:14:06       20 阅读

热门阅读

  1. Django老项目升级到新版本

    2024-04-22 07:14:06       18 阅读
  2. 第十五届蓝桥杯题解-握手

    2024-04-22 07:14:06       16 阅读
  3. 【技术】Spring Boot 将 Word 转换为 PDF 2.0 版本

    2024-04-22 07:14:06       11 阅读
  4. C#项目中bin目录下

    2024-04-22 07:14:06       13 阅读
  5. 基于SpringCloudAlibaba+Sentinel的分布式限流设计

    2024-04-22 07:14:06       15 阅读
  6. 搜索+剪枝,LeetCode 216. 组合总和 III

    2024-04-22 07:14:06       12 阅读
  7. 【iOS安全】iOS ARM汇编

    2024-04-22 07:14:06       16 阅读
  8. 组合总和(Lc39)——排序+剪枝+回溯

    2024-04-22 07:14:06       9 阅读
  9. 【无标题】axios的ts封装,记录一下(Vue3项目)

    2024-04-22 07:14:06       11 阅读
  10. STM32相关手册

    2024-04-22 07:14:06       12 阅读