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


使用的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字节,但是文件数据却没有

\

\

终端写入数据并查看

\

\

\

退出程序及验证结果

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

\

\

相关内容