5

FUSEベースのアンダーランド ファイルシステム アプリケーションを Java で構築したいと考えています。Fuse-JjnetfsFuseforjavajavafuseなど、Web 上で利用可能なバインディング ライブラリがいくつかあります。

今日の時点でどれも本当に生きているようには見えないので、私は最初の試みをしましたJavaFuse

実装する必要があるインターフェースはそこにあります: http://code.google.com/p/javafuse/source/browse/fs/JavaFS.java

そして、このヒューズの helloworld の例を再現したいと思いました。


質問: 次の可能性はありますか?

static int hello_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
                     off_t offset, struct fuse_file_info *fi)
{
(void) offset;
(void) fi;

if(strcmp(path, "/") != 0)
    return -ENOENT;

filler(buf, ".", NULL, 0);
filler(buf, "..", NULL, 0);
filler(buf, hello_path + 1, NULL, 0);

return 0;
}

この Java 関数で実装できます。

public int readdir_pre(String path, long buf, long filler, int offset, Fuse_file_info info);
public int readdir_post(String path, long buf, long filler, int offset, Fuse_file_info info, int result);

filler何かを見逃したのかもしれませんが、ディレクトリの内容を入力する方法がわかりません...

この helloworld の例だけでも、次のような奇妙な点があります。

public int read_post(String path, String buf, int size, int offset, Fuse_file_info info, int result);

Javaは不変であると想定されているのに対し、これはデータのバイトで満たさ れることになっています。bufsizeString

4

2 に答える 2

1

jnr-fuseプロジェクトを試すことができます。

このプロジェクトは JNR を使用するため、完全な JNI パフォーマンスと実装の容易さを実現できます。

hello-world ファイルシステムフィルタの実装例。

于 2015-06-09T22:55:23.710 に答える
0

read_predouble 関数&で何をしようとしているのか正確にはわかりませんread_post

私は推測しますが、それらは作業前と作業後を表しています。たぶん、通常を宣言して、readdir()内部からプリ&ポストと呼ぶことができますか?同じ引数を前後に渡しますか? に宣言する必要があるためreaddir()ですfuse_main()

バッファに関する 2 番目のことについては、ストレージを保持するバイトを期待するだけです。size_t size文字配列、またはバッファのサイズを表すで示されるバイトを含むものを渡すことができます。ではhelloworld.c、文字列の文字は を介し​​てバッファにコピーされmemcpy()ます。ファイルからバイトを読み取り、適切な長さでバッファとして渡すことができます。

私は FUSE を初めて使用するので、標準の C と比較して Java を使用するとどのように動作するかを知りたいと思っています。

于 2012-08-28T18:25:31.250 に答える