2012-06-27 11 views
5

Chciałbym zbudować aplikację systemu plików w głębi lądu w wersji FUSE, w Javie. Istnieje kilka bibliotek powiązań dostępnych w Internecie, Fuse-J, jnetfs, Fuseforjava, javafuse.Czy istnieje szansa, że ​​javafuse działa?

Żadne z nich nie wydaje się być tak żywe jak na dzień dzisiejszy, więc podjąłem pierwszą próbę uzyskania JavaFuse.

Interfejs musimy wdrożyć istnieje: http://code.google.com/p/javafuse/source/browse/fs/JavaFS.java

i chciałem odtworzyć ten fuse helloworld example.


Pytanie: Czy jest jakaś szansa, że ​​w ten sposób:

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

mogą być realizowane za pomocą tej funkcji 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); 

Może coś przeoczyłem, ale nie mogę zobaczyć, jak korzystać filler do wypełnienia zawartości katalogów ...

Istnieją inne osobliwości tylko dla tego przykładu helloworld, jak:

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

który jest ma być wypełnićbuf z size bajtów danych, natomiast Java String ma być niezmienna.

+0

Sugerowałbym, używając https://github.com/EtiennePerot/fuse-jna – user629926

+0

tak, to wygląda interesująco. Ale już przerzuciłem się na [JNetFs] (https://code.launchpad.net/jnetfs), które do tej pory spełniało wszystkie moje wymagania! (chociaż niektórych wiązań wciąż brakowało w bibliotece C, musiałem je samemu związać) – Kevin

+0

+1 za posiadanie listy implementacji FUSE-Java. –

Odpowiedz

0

Nie jestem dokładnie pewien, co próbujesz zrobić z podwójną funkcją read_pre & read_post.

Chociaż myślę, że reprezentują pracę przed i po pracy. Może możesz zadeklarować normalny numer readdir() i zadzwonić do Ciebie pod numer & od wewnątrz? Przesyłając te same argumenty z powrotem &? Ponieważ musisz zadeklarować readdir() dla fuse_main().

Co do drugiej rzeczy z buforami, to po prostu oczekuje na przechowywanie bajtów. Możesz przekazać tablice znaków lub cokolwiek z bajtami w nim oznaczonymi przez size_t size, które reprezentują rozmiar bufora. W helloworld.c znaki łańcuchowe są kopiowane do bufora przez memcpy(). Możesz odczytać bajty z pliku i przekazać je jako bufor wraz z odpowiednią długością.

Jestem nowy bezpiecznik i chcieliby wiedzieć, jak to jest pracować przy użyciu języka Java w porównaniu do standardowej C.

+0

masz rację w swoich przypuszczeniach, ale wynik jest taki sam, ta biblioteka 'javafuse' wydaje się w ogóle nie być użyteczna ... funkcja' memcpy() 'nie jest dostępna w Javie, a więc nie mamy sposób na podanie wymaganych informacji. – Kevin

1

Można spróbować jnr-fuse projektu.

Projekt wykorzystuje metodę JNR, dzięki czemu osiąga się pełną wydajność JNI i łatwość wdrożenia.

Przykład wdrożenia hello-world filesystem filtr.

Powiązane problemy