6

/procのようなディスクベースではない仮想ファイルシステムに取り組んでいます。次に、ext3ファイルシステム上のターゲットへのシンボリックリンクを作成します。これを実現する方法に関する標準的なドキュメントは見つかりませんでした。私がこれまでに推測したことは、に入れる関数を書かなければならないということsymlinkですstruct inode_operations。しかし、率直に言って、関数パラメーターを使用しても途方に暮れています。

重要な場合は、LWNに関するこのチュートリアルから始めました:http://lwn.net/Articles/13325/

編集:私は現在FUSEではなくlibfsを使用しています

4

3 に答える 3

3

おそらくあなたはヒューズを使用しています、そうでない場合は、してください:)

getattr関数を実装して、オブジェクトがシンボリックリンクであることをカーネルに通知してから、readlink関数を実装し、リンクがリンクする必要のあるパスを返すだけです。残りはカーネルが行います。

于 2009-12-28T20:52:12.683 に答える
2

ようやく達成できました。これが私がしたことです(ファイルシステムが何を達成したいかによって、いくつかの詳細が異なる場合があります):

  1. S_IFLNKモードでシンボリックリンクのiノードを作成し、ターゲットをi_privateフィールドに追加します。

  2. generic_readlinkにはfollow_linkが存在する必要があるため、follow_linkを実装します

static void * sample_follow_link(struct dentry * dentry、struct nameidata * nd)
{{
    nd-> depth = 0;
    nd_set_link(nd、(char *)dentry-> d_inode-> i_private);
    NULLを返します。
}

static struct inode_operations sample_inode_ops = {
    .readlink = generic_readlink、
    .follow_link = sample_follow_link、
};

....。
//dentryおよびinode作成の関数内
iノード->i_op= sample_inode_ops

于 2010-01-02T18:38:20.637 に答える
1

linux / fs /ext2/ソースコードを確認することをお勧めします。ファイルsymlink.c、inode.c、namei.cおよびおそらく他のいくつか。何をする必要があるかについて、いくつかのアイデアが得られます。予想に反して、個々のファイルシステムのファイルシステムコードは実際には非常に短く、読みやすいものです。

しかし、新しい仮想ファイルシステムを作成する代わりに、別の質問をするかもしれません。私の場合、ユーザーレベルのファイルシステムを融合するだけでは十分ではないでしょうか。それらには、仮想ファイルシステムを作成するためのわずかに優れたドキュメントと、さらにいくつかの例があります。

于 2009-12-28T18:21:27.060 に答える