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

打开文件的时候如果使用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);//写入

你可能感兴趣的:(linux open 函数O_DIRECT标志位使用说明)