5

我想用 Java 构建一个基于FUSE的地下文件系统应用程序。网上有一些绑定库,Fuse-JjnetfsFuseforjavajavafuse

到目前为止,他们似乎都还没有真正活着,所以我第一次尝试JavaFuse

我们必须实现的接口在那里: http ://code.google.com/p/javafuse/source/browse/fs/JavaFS.java

我想重现这个fuse 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);

它应该填充 buf字节数据,size而 JavaString应该是不可变的。

4

2 回答 2

1

你可以试试jnr-fuse项目。

该项目使用 JNR,因此您可以实现完整的 JNI 性能和易于实施。

实现hello-world 文件系统过滤器的示例。

于 2015-06-09T22:55:23.710 回答
0

我不太确定,你想用双重函数read_pre&做什么read_post

虽然我猜,它们代表工作前和工作后。也许您可以声明正常readdir()并从内部称您为 pre & post?来回传递相同的论点?因为你必须readdir()fuse_main().

关于缓冲区的第二件事,它只需要一个字节保存存储。您可以将字符数组或其中包含字节的任何内容传递给它,用它size_t size表示缓冲区的大小。在helloworld.c中,字符串字符通过 复制到缓冲区memcpy()。您可以从文件中读取字节并将它们作为缓冲区以及适当的长度传递。

我是 FUSE 的新手,想知道使用 Java 与标准 C 相比如何工作。

于 2012-08-28T18:25:31.250 回答