1

我试图使用 O_DIRECT 打开一个文件,我们正在使用 jffs2

fd = open(filename, O_RDONLY|O_DIRECT|O_SYNC);

但我只得到一个“无效参数”错误。我也尝试了 此 SO 链接中的解决方案,但无济于事。当然,我在构建源代码时也加入了“-D_GNU_SOURCE”。

我读过 tmpfs 不支持 O_DIRECT,但找不到对 jffs2 的支持或不支持。如果有人可以给我证明或不证明 jffs2 支持和/或我缺少使 O_DIRECT 工作的任何其他东西。

注意:这一切都是因为当我使用 fread()/read() 时,Linux 似乎会自行缓存内存数据。并且使用system("echo 3 > /proc/sys/vm/drop_caches");为时已晚,因为我不希望 FS 首先分配缓存。

谢谢,纳兹

4

1 回答 1

2

jffs2 不支持O_DIRECT.

可以看到__dentry_open(),为了支持O_DIRECT,文件系统必须提供结构的direct_IO和/或get_xip_mem成员address_space_operations。您还可以看到jffs2 不提供这些成员

目前尚不清楚您为什么如此热衷于避免页面缓存。页面缓存中的页面实际上是“空闲的”——当需要更多内存用于其他用途时,它们将被回收。

于 2011-05-17T11:43:40.660 回答