【问题标题】:Any chance javafuse can work?javafuse可以工作吗?
【发布时间】:2016-02-16 20:05:07
【问题描述】:

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

截至今天,他们似乎还没有真正活着,所以我第一次尝试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);

应该用size 字节的数据填充 buf,而Java String 应该是不可变的。

【问题讨论】:

  • 是的,它看起来很有趣。但我已经切换到JNetFs,它回答了我迄今为止的所有要求! (虽然 C 库中仍然缺少一些绑定,但我必须自己绑定它们)
  • +1 获得 FUSE-Java 实现列表。

标签: java fuse


【解决方案1】:

你可以试试jnr-fuse 项目。

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

实现hello-world filesystem过滤器的示例。

【讨论】:

    【解决方案2】:

    我不太确定,您要使用双重功能 read_preread_post 做什么。

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

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

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

    【讨论】:

    • 你的猜测肯定是对的,但结果是一样的,这个javafuse库似乎根本不可用......memcpy()函数在Java中不可用,因此我们无法提供所需的信息。
    猜你喜欢
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2018-04-04
    • 2011-10-16
    相关资源
    最近更新 更多