我试图使用O_DIRECT打开一个文件,我们正在使用jffs2
fd = open(filename, O_RDONLY|O_DIRECT|O_SYNC);
但我只得到"invalid argument"错误 . 我也尝试过解决方案in this SO link但无济于事 . 当然,我也在构建源代码时加入"-D_GNU_SOURCE" .
我已经读过tmpfs不支持O_DIRECT,但找不到支持或不支持jffs2 . 如果有人可以给我证明或不证明jffs2支持和/或任何其他我缺少的东西使O_DIRECT工作 .
注意:这一切都发生了,因为当我使用fread()/ read()时,Linux似乎自己缓存内存数据 . 使用 system("echo 3 > /proc/sys/vm/drop_caches");
会为时已晚,因为我不希望FS首先分配缓存 .
谢谢,纳泽
1 回答
jffs2不支持
O_DIRECT
.您can see in __dentry_open()为了支持
O_DIRECT
,文件系统必须提供address_space_operations
结构的direct_IO
和/或get_xip_mem
成员 . 你也可以看到jffs2 does not supply these members .目前尚不清楚为什么你如此热衷于避免页面缓存 . 页面缓存中的页面实际上是“免费的” - 当其他用途需要更多内存时,它们将被回收 .