您的位置:首页 > 运维架构 > Linux

linux open 函数O_DIRECT标志位使用说明

2016-06-16 10:18 465 查看
打开文件的时候如果使用O_DIRECT按照man命令说的就是直接进行文件IO,而系统不进行缓存,会影响文件读写速度,但可能对用户内存影响较小。

这个标志位在使用的时候还是有些东西需要注意的,否则写文件时既没有报错,而内容也没有写入文件,会搞得人一头雾水。

注意事项:

1. 每次写入的数据块大小要是文件所在块设备 block size的整数倍。 可以通过如下命令查看当前文件系统块大写:tune2fs -l  /dev/sda5,其中/dev/sda5即为对应设备文件,也就是打开文件所在的分区。我机器的blocksize=4096 字节

2. 写入数据在用户内存中的首地址要为512的整数倍(如果为块大小的整数倍就更没有问题),所以不能使用数组保存数据,而要使用malloc来申请空间

const int SIZE = 4096*10(每次写入文件数据块大小)

char *p = malloc(SIZE+512); //多申请512空间

char *q = 0;

q = p&(~511);// 使q是512字节对齐的,q空间的地址范围为SIZE。

int fd = open("文件路径", O_RDWR|O_DIRECT);//省略打开失败判断

write(fd, q, SIZE);//写入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: