Direct IO的程序实现
实现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的偏移地址必须是页面大小的整数倍。
补充:移动开发 , IOS ,