有没有可能让javafuse工作?

5
我希望构建一个基于FUSE的地下文件系统应用程序,使用Java语言。 网络上有一些可用的绑定库,包括Fuse-J, jnetfs, Fuseforjava, javafuse
截至今天,它们似乎都不是很活跃,所以我首先尝试了JavaFuse
我们必须实现的接口在这里: http://code.google.com/p/javafuse/source/browse/fs/JavaFS.java 我想要复制这个fuse helloworld example

问题:这个有没有机会:

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);

这段文字的意思是:该函数应该使用填充数据,将bufsize字节一起使用,而Java String应该是不可变的。

我建议使用https://github.com/EtiennePerot/fuse-jna。 - user629926
是的,它看起来很有趣。但我已经转向JNetFs,迄今为止它已经满足了我所有的需求!(虽然C库中仍然缺少一些绑定,我不得不自己绑定它们) - Kevin
有一份FUSE-Java实现列表,加1分。 - MarnixKlooster ReinstateMonica
2个回答

2
你可以尝试jnr-fuse项目。
该项目使用JNR,因此您可以实现完整的JNI性能和易于实现。
一个实现示例是hello-world filesystem过滤器。

0

我不太确定你想用双重函数read_preread_post做什么。

虽然我猜它们代表预处理和后处理。也许你可以声明正常的readdir(),并从内部调用你的pre和post?来回传递相同的参数?因为你必须将readdir()声明到fuse_main()中。

至于缓冲区的第二个问题,它只期望一个字节存储空间。你可以传递字符数组或任何包含字节的东西,由size_t size表示缓冲区的大小。在helloworld.c中,字符串字符通过memcpy()复制到缓冲区中。你可以从文件中读取字节,并将它们作为缓冲区传递,同时附带适当的长度。

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


你的猜测肯定是正确的,但结果是一样的,这个javafuse库似乎根本无法使用...在Java中没有可用的memcpy()函数,因此我们无法提供所需的信息。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接