欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Linux系统编程之验证kernel内核缓存区大小-)4096字节

程序员文章站 2022-07-08 18:28:34
使用的API read/write函数 常常被称为Unbuffered IO。指的是无用户缓存区。但不保证不使用内核缓存区。我们可以用来验证内核缓存区的大小是不是4096字节。这...

使用的API

read/write函数 常常被称为Unbuffered IO。指的是无用户缓存区。但不保证不使用内核缓存区。我们可以用来验证内核缓存区的大小是不是4096字节。这里我们还用一个系统函数 dup2 文件描述符重定向函数,来实现 从终端输入 直接输出到文件中。

验证内核缓存区大小

思路很简单,就是测试4096这个临界点。

首先往文件中写4096个字节,查看数据是否写入到磁盘文件,从终端读入数据,缓存区4096数据是否写到磁盘文件。

代码

#include 
#include 
#include 
#include 

int main(void)
{
    int fd = open("temp.txt",O_RDWR|O_CREAT|O_TRUNC,0664);
    char temp[1024]={0};
    dup2(fd,STDOUT_FILENO);
    //文件重定向后,往终端输出的数据,会写入的文件中
    //先写4096B试试,看看能写入磁盘不
    for(int i = 0; i < 4096;i++)
    {
        printf("%c",48);
    }
    //kernel缓存区大小为4096!写到4097字节,缓冲区溢出才会将缓冲区内容写道磁盘文件,
    //缓存区继续放数据
    while(1)
    {
        //读取终端数据
        read(STDIN_FILENO,temp,sizeof(temp));
        if(strncmp(temp,"exit",4)==0)
            break;
        printf("%s\n",temp);
    }
    close(fd);
    return 0;
}

启动程序查看文件数据

程序启动,写入4096字节,但是文件数据却没有

Linux系统编程之验证kernel内核缓存区大小-)4096字节

Linux系统编程之验证kernel内核缓存区大小-)4096字节

终端写入数据并查看

Linux系统编程之验证kernel内核缓存区大小-)4096字节

Linux系统编程之验证kernel内核缓存区大小-)4096字节

Linux系统编程之验证kernel内核缓存区大小-)4096字节

退出程序及验证结果

验证结果,写到4097个字节,内核缓存区要溢出了,才将缓冲区内容写到磁盘中去,再将数据写到内核缓存区,等待下一次缓存区满或者文件关闭 才会将缓存区内容写到磁盘。

Linux系统编程之验证kernel内核缓存区大小-)4096字节

Linux系统编程之验证kernel内核缓存区大小-)4096字节