我正在尝试使用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");就太晚了,因为我不想让文件系统一开始就分配缓存。
谢谢,Naze
发布于 2011-05-17 19:43:41
jffs2不支持O_DIRECT。
can see in __dentry_open()指出,为了支持O_DIRECT,文件系统必须提供address_space_operations结构的direct_IO和/或get_xip_mem成员。您同样可以看到该jffs2 does not supply these members。
不清楚为什么您如此热衷于避免页面缓存。页面缓存中的页面实际上是“空闲的”-当其他用途需要更多内存时,它们将被回收。
https://stackoverflow.com/questions/6030002
复制相似问题