Linux系统编程:验证kernel内核缓存区大小-4096字节
使用的API
read/write函數(shù) 常常被稱為Unbuffered IO。指的是無(wú)用戶緩存區(qū)。但不保證不使用內(nèi)核緩存區(qū)。我們可以用來(lái)驗(yàn)證內(nèi)核緩存區(qū)的大小是不是4096字節(jié)。這里我們還用一個(gè)系統(tǒng)函數(shù) dup2 文件描述符重定向函數(shù),來(lái)實(shí)現(xiàn) 從終端輸入 直接輸出到文件中。
驗(yàn)證內(nèi)核緩存區(qū)大小
思路很簡(jiǎn)單,就是測(cè)試4096這個(gè)臨界點(diǎn)。
首先往文件中寫(xiě)4096個(gè)字節(jié),查看數(shù)據(jù)是否寫(xiě)入到磁盤(pán)文件,從終端讀入數(shù)據(jù),緩存區(qū)4096數(shù)據(jù)是否寫(xiě)到磁盤(pán)文件。
代碼
#include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h>int main(void) {int fd = open("temp.txt",O_RDWR|O_CREAT|O_TRUNC,0664);char temp[1024]={0};dup2(fd,STDOUT_FILENO);//文件重定向后,往終端輸出的數(shù)據(jù),會(huì)寫(xiě)入的文件中//先寫(xiě)4096B試試,看看能寫(xiě)入磁盤(pán)不for(int i = 0; i < 4096;i++){printf("%c",48);}//kernel緩存區(qū)大小為4096!寫(xiě)到4097字節(jié),緩沖區(qū)溢出才會(huì)將緩沖區(qū)內(nèi)容寫(xiě)道磁盤(pán)文件,//緩存區(qū)繼續(xù)放數(shù)據(jù)while(1){//讀取終端數(shù)據(jù)read(STDIN_FILENO,temp,sizeof(temp));if(strncmp(temp,"exit",4)==0)break;printf("%s\n",temp);}close(fd);return 0; }啟動(dòng)程序查看文件數(shù)據(jù)
程序啟動(dòng),寫(xiě)入4096字節(jié),但是文件數(shù)據(jù)卻沒(méi)有
終端寫(xiě)入數(shù)據(jù)并查看
退出程序及驗(yàn)證結(jié)果
驗(yàn)證結(jié)果,寫(xiě)到4097個(gè)字節(jié),內(nèi)核緩存區(qū)要溢出了,才將緩沖區(qū)內(nèi)容寫(xiě)到磁盤(pán)中去,再將數(shù)據(jù)寫(xiě)到內(nèi)核緩存區(qū),等待下一次緩存區(qū)滿或者文件關(guān)閉 才會(huì)將緩存區(qū)內(nèi)容寫(xiě)到磁盤(pán)。
總結(jié)
以上是生活随笔為你收集整理的Linux系统编程:验证kernel内核缓存区大小-4096字节的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: makefile 编译不同目录下的源文件
- 下一篇: linux 获取计算机IP地址、MAC、