DirectIO方式读写文件,只需在打开文件时选上O_DIRECT选项就行,但必须在所有的include前加上#define _GNU_SOURCE,另外以DirectIO方式读写时,开辟的Buffer必须是系统每页大小的整数倍而且必须移页大小为标准对齐,例如linux2.6下每页是4096byt(函数
char*
getpagesize()
),申请的buffer大小只能是4096的整数倍
例子:
(test.c)
#define _GNU_SOURCE
#define
BUFFER_SIZE
8192
Int fd = open(“testfile”, O_CREAT | O_RDWR | O_DIRECT);
int
pagesize=getpagesize();
char*
realbuff=malloc(BUFFER_SIZE+pagesize);
int pagesize=getpagesize();
char*alignedbuff=(char*)((((inunsigned)
realbuff
+pagesize-1)/pagesize)*pagesize);
write(fd,
alignedbuff
,
BUFFER_SIZE
);
free
(
realbuff
);
申请的地址
realbuff
没有对其,经过下面的俩行操作后,
alignedbuff
是对其的地址,值得注意的是,在施放空间时,要全部释放掉