實現Direct IO的程序實現
(1)首先要在應用前加上宏:#define _USE_GNU 1 和#define _GNU_SOURCE
(2)在open一個設備文件的時候要加上O_DERECT選項。如:int writefd =open(dev,O_RDWR|O_DIRECT);
(3)把要存儲數據或者是要寫入數據的buf與頁對齊。同時保證偏移地址是頁大小的整數倍。
相應的程序如下:
#include<stdio.h>
#define _USE_GNU 1
#define _GNU_SOURCE
int main()
{
char *buf;
size_t buf_size = 1024;
off_t offset = 4096;
posix_memalign((void **)&buf,getpagesize(),buf_size);
int writefd =open("a.txt",O_RDWR|O_DIRECT);
if(writefd<0)
{
printf("can't open the file!\n");
exit(1);
}
if(lseek(fd,offset,SEEK_SET)<0)
//if(lseek(fd,0,SEEK_SET)<0)
{
printf("lseekthe disk is error!\n");
exit(1); }
if(buf_size!= read(fd,buf,buf_size))
{
perror("readdata from the disk is error!");
printf("thetem_size is %d\n",temp_size);
exit(1);
}
}
注意以下幾點:(1)buf必須要用函數posix_memalign()來與頁進行對齊。
(2)lseek的偏移地址必須是頁面大小的整數倍。