Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1172388
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: LINUX

2015-12-24 17:12:16

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

阅读(1281) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~