2012-06-27 20 views
5

Me gustaría construir una aplicación de sistema de archivos under-based FUSE, en Java. Hay algunas bibliotecas de enlaces disponibles en la web, Fuse-J, jnetfs, Fuseforjava, javafuse.¿Alguna posibilidad de que javafuse pueda funcionar?

Ninguno de ellos parece realmente vivo hasta el día de hoy, así que le di mi primer intento al JavaFuse.

La interfaz debemos poner en práctica está ahí: http://code.google.com/p/javafuse/source/browse/fs/JavaFS.java

y quería reproducir este fuse helloworld example.


Pregunta: ¿Hay alguna posibilidad de que este:

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

puede ser implementado por esta función 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); 

Tal vez me haya perdido algo, pero no puedo ver cómo utilizar filler para poblar el contenido del directorio ...

Hay otras rarezas sólo para este ejemplo holamundo, como:

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

que es supone que rellenebuf con size bytes de datos, mientras que Java String se supone que son inmutables.

+0

Sugestión con https://github.com/EtiennePerot/fuse-jna – user629926

+0

sí, parece interesante. Pero ya cambié a [JNetFs] (https://code.launchpad.net/jnetfs) que respondió a todos mis requisitos hasta el momento. (aunque todavía faltan algunos enlaces en la biblioteca C, tuve que vincularlos yo mismo) – Kevin

+0

+1 por tener una lista de implementaciones FUSE-Java. –

Respuesta

0

No estoy exactamente seguro, lo que está tratando de hacer con la doble función read_pre & read_post.

Aunque supongo que representan trabajo previo y posterior al trabajo. Tal vez puedas declarar el readdir() normal y te llame pre & desde dentro? Pasando los mismos argumentos de vuelta & adelante? Porque tiene que declarar readdir() en el fuse_main().

Y sobre lo segundo con los búferes, solo espera un almacenamiento de bytes. Puede pasar las matrices de caracteres, o cualquier cosa con bytes, denotada por size_t size que representa el tamaño del búfer. En helloworld.c, los caracteres de cadena se copian en el búfer a través de memcpy(). Puede leer bytes del archivo y pasarlos como búfer junto con la longitud adecuada.

Soy nuevo para fusionar y me gustaría saber cómo se va a trabajar con Java en comparación con el estándar C

+0

está en lo cierto en sus suposiciones, pero el resultado es el mismo, esta biblioteca 'javafuse' parece no ser utilizable en absoluto ... la función' memcpy() 'no está disponible en Java, y por lo tanto no tenemos forma de proporcionar la información requerida. – Kevin

1

Usted puede intentar jnr-fuse proyecto.

El proyecto usa JNR, por lo que logra un rendimiento JNI completo y facilidad de implementación.

Un ejemplo de implementación hello-world filesystem filtro.

Cuestiones relacionadas