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字节,但是文件数据却没有
终端写入数据并查看
退出程序及验证结果
验证结果,写到4097个字节,内核缓存区要溢出了,才将缓冲区内容写到磁盘中去,再将数据写到内核缓存区,等待下一次缓存区满或者文件关闭 才会将缓存区内容写到磁盘。
上一篇: 2020网易笔试-1