2017-12-19 27 views
0

私はFUSEとCとFSの新人です。私はlibfuseパッケージで与えられているpassthrough FSの例を使いこなしています。コード内でFUSEがルートディレクトリをミラーリングするように指示されている場合は、誰でもヒントを与えることができますか?私は2つの基本関数 - * xmp_init()とmain() - かなり不器用であることがわかりました。ここでFUSEのlib passthrough.cの例です。それは私/正確にどこに映っていますか?

彼らは以下のとおりです。

static void *xmp_init(struct fuse_conn_info *conn, 
       struct fuse_config *cfg) 
{ 
    (void) conn; 
    cfg->use_ino = 1; 
    cfg->entry_timeout = 0; 
    cfg->attr_timeout = 0; 
    cfg->negative_timeout = 0; 

    return NULL; 
} 

int main(int argc, char *argv[]) 
{ 
    umask(0); 
    return fuse_main(argc, argv, &xmp_oper, NULL); 
} 

およびその他の機能libfuseインターフェイスの実装...もの、のように、ちょうどあります。私は自分の不自由なFSを作る必要がある、私はマウントされたFSが白いシートになるようにpassthrough.cを修正する必要があり、実装された機能を利用してファイルやものを管理することができる。

ありがとうございます!

答えて

0

この例でヒューズの動作の実装を読むと、それが表示されます。ルートファイルシステムのミラーリングに関するこの特定の詳細が隠されている場所は一箇所ありません。

例えば、stat(2)システムコールに似ているgetattr fuse operationをチェックして、与えられたファイルのstat構造体を(ポインタで)返すことが期待されます。

ファイルがヒューズファイルシステムでアクセスされると、gettattrオペレーションを実装する関数が最初に呼び出され、このオペレーションの実装は必須です。 the implementation in the exampleを見ると

static int xmp_getattr(const char *path, struct stat *stbuf, 
      struct fuse_file_info *fi) 
{ 
    (void) fi; 
    int res; 

    res = lstat(path, stbuf); 
    if (res == -1) 
     return -errno; 

    return 0; 
} 

我々は、すべてこのコードがないことがわかり、それがちょうど同じ引数でlstat(2)を呼び出すことです。

ですから、このように、この例のファイルシステムのマウント時に:その後、

$ ./passthrough /tmp/example 

、そこにファイルをリストしよう:あなたがのルートにアクセスしているので、

$ ls /tmp/example/ 

fuselibはパス"/"xmp_getattr()を呼び出しますがヒューズファイルシステム。 xmp_getattr()のコードは、同様のものに対して通常のシステムコールを呼び出すだけで、ルートファイルシステムは/tmp/exampleマウントポイントにミラーリングされます。

関連する問題