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);//写入
这个标志位在使用的时候还是有些东西需要注意的,否则写文件时既没有报错,而内容也没有写入文件,会搞得人一头雾水。
注意事项:
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服务器如何配置网站以及绑定域名
- linux中的服务
- Linux无法解析hosts里面绑定域名的排查方法
- Linux中安装PHP的pdo_mysql扩展的详细解决方案
- linux下C语言main函数参数解析
- Linux编辑网卡配置,手动配置IP地址
- LINUX常用命令 第一天总结
- Linux下怎么安装JDK
- linux之 线程与进程
- linux 时间函数总结
- Linux里设置环境变量的方法(export PATH)
- 嵌入式Linux C语言(四)——指针与数组
- 献给初学者:谈谈如何学习Linux操作系统
- NFS服务器配置
- (转) linux I/O优化 磁盘读写参数设置
- 搭建GIT服务器
- Linux统计某文件夹下文件、文件夹的个数
- Linux进程地址管理之mm_struct
- Linux的网卡由eth0变成了eth1,如何修复
- Linux设备驱动的class(类)以timed_output为基础