2012-06-27 28 views
5

我想用Java構建一個基於FUSE的基於底層的文件系統應用程序。 網上有幾個綁定庫,Fuse-Jjnetfs,Fuseforjava,javafuse任何機會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應該是不可變的。

+0

我會使用https://github.com/EtiennePerot/fuse-jna來吸收 – user629926

+0

是的,它看起來很有趣。但是我已經切換到[JNetFs](https://code.launchpad.net/jnetfs),它回答了我迄今爲止的所有要求! (雖然在C庫中仍然缺少一些綁定,但我必須自己綁定它們) – Kevin

+0

+1以獲得FUSE-Java實現的列表。 –

回答

0

我並不確定,您正在嘗試使用雙功能read_pre & read_post

雖然我猜,他們代表了工作前和工作後。也許你可以從裏面聲明正常readdir()並打電話給你預先&帖子?通過相同的論點返回&?因爲您必須將readdir()聲明爲fuse_main()

關於緩衝區的第二件事,它只是期望一個字節存儲。您可以將字符數組或其中包含字節的任何東西傳遞給它,表示爲代表緩衝區大小的size_t size。在helloworld.c中,通過memcpy()將字符串字符複製到緩衝區。您可以從文件中讀取字節,並將它們作爲緩衝區以適當的長度傳遞。

我是新來的FUSE,想知道它是如何比標準C.

+0

你的猜測當然是對的,但結果是一樣的,這個'javafuse'庫似乎根本不可用...... memcpy()函數在Java中不可用,因此我們沒有提供所需信息的方式。 – Kevin

1

您可以嘗試jnr-fuse項目中使用Java的工作。

該項目使用JNR,因此您可以實現完整的JNI性能並且易於實現。

實施例hello-world filesystem過濾器。

相關問題