我尝试使用O_DIRECT打开文件,我们正在使用jffs2
fd = open(filename, O_RDONLY|O_DIRECT|O_SYNC);
但我只得到一个“无效参数”错误。 我也尝试了解决方案 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首先分配缓存。
谢谢, 濑
答案 0 :(得分:2)
jffs2不支持O_DIRECT
。
您can see in __dentry_open()
为了支持O_DIRECT
,文件系统必须提供direct_IO
结构的get_xip_mem
和/或address_space_operations
成员。您同样可以看到jffs2 does not supply these members。
目前尚不清楚为什么你如此热衷于避免页面缓存。页面缓存中的页面实际上是“免费的” - 当其他用途需要更多内存时,它们将被回收。