1

O_DIRECTを使用してファイルを開こうとしていますが、jffs2を使用しています

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

しかし、「無効な引数」エラーしか発生しません。私も このSOリンクの解決策を試しましたが、役に立ちませんでした。もちろん、ソースの作成にも「-D_GNU_SOURCE」を入れました。

O_DIRECTはtmpfsでサポートされていないことを読みましたが、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()ます。同様に、jffs2がこれらのメンバーを提供していないことがわかります。O_DIRECTdirect_IOget_xip_memaddress_space_operations

ページキャッシュを避けたい理由は明らかではありません。ページキャッシュ内のページは事実上「空き」です。他の用途でより多くのメモリが必要になると、ページは再利用されます。

于 2011-05-17T11:43:40.660 に答える