最近比较忙,RHEL-7.1要发布所有同仁们都在紧锣密鼓的为7.1做最后的工作。关于文件系统的大话题只好等到这之后再找时间继续写了,不过今天发现了一个小问题可以简单的和大家在这里分享一下,问题比较浅显请大牛自动略过。本来我想给这篇文章起名叫“公共标准对C语言程序的影响”,不过转念一想这个题目太大了,我也说不过来,所以我就把名字改成了对open()的O_DIRECT参数引发的问题的讨论,至于更多的公共标准的问题就不是本文的范围了;)
问题的起因是这样的,我有一个bug的reproducer,原作者是谁我早已经忘了,我只是想尝试一下它所描述的bug还能否复现,但是测试后发现结果是失败。嗯??难道出现了传说中的regression fail? 为了确认只好阅读这个别人写的code,以及它所对应的bug的描述(读别人的代码真是遭罪,特别是写的不怎样的。。。),发现错误的现象并不复合bug的描述。由于code有很多很多行,还有多线程,我就不把代码都列出来了,我只把和问题相关的代码重新组织如下:
#define _XOPEN_SOURCE 600
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define READ_SIZE 512
#define BUF_SIZE 1024 * 1024
#ifndef O_DIRECT
#define O_DIRECT 00040000
#endif
int main()
{
.....
.....
fd = open(filename, O_RDONLY | O_DIRE