O_DIRECT选项使用方法

1、使用O_DIRECT的目的:对文件进行直接的IO操作,避免系统缓冲区的影响,一般用于测试自带的缓存系统的效果

2、使用O_DIRECT方法

diskfd = open("/dev/sdb", O_RDWR| O_DIRECT)

error: ‘O_DIRECT’ undeclared (first use in thisfunction)

//说明编译时无法识别O_DIRECT标识符,在源文件顶部加入#define _GNU_SOURCE,或者使用编译选项-D__GNU_SOURCE,实际上是打开_GNU_SOURCE这个宏以便用户使用/usr/include/features.h中的功能。

char *buf = (char *)malloc(BUF_SIZE*sizeof(char));

read(diskfd, buf,BUF_SIZE); //返回实际读取的长度,可能不足BUF_SIZE甚至对齐的大小

read error:invalid argument

//参数buf的问题,必须保证存放文件数据的缓冲区buf的起始位置以及大小必须是磁盘逻辑块大小的整数倍,另外文件的偏移也必须对齐,一般也就是512字节(也有可能是一内存页大小getpagesize(),4096),实际测试为512字节,即扇区的大小。

offset = offset + getpagesize() - offset %getpagesize();

rand() 0-RAND_MAX(2^32-1)

off_t默认为32位,(-2^31 ~ 2^32-1)总共可寻址的空间为4GB,但是测试HDD时需要超过4G的可寻址范围,使用#define _FILE_OFFSET_BITS64或者使用# define__USE_FILE_OFFSET64    1或者编译时使用编译选项-D_ FILE_OFFSET_BITS=64

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值