Aquí es an example aplicación de un fusible muy, muy básico que está respaldado por un segmento de memoria compartida glorificado (xenstore). Es una bifurcación del sistema original de archivos xenstore FUSE que mantengo.
También encontrará un código que le muestre cómo hacer Valgrind más útil al depurar las implementaciones de fusibles.
escribir funciones para/crear/leer/escribir/truncado abierto/getattr/etc y los pasan a fusible (números de línea son del ejemplo enlazado):
343 static struct fuse_operations const xsfs_ops = {
344 .getattr = xsfs_getattr,
345 .mknod = xsfs_mknod,
346 .mkdir = xsfs_mkdir,
347 .unlink = xsfs_rm,
348 .rmdir = xsfs_rmdir,
349 .truncate = xsfs_truncate,
350 .open = xsfs_open,
351 .read = xsfs_read,
352 .write = xsfs_write,
353 .readdir = xsfs_readdir,
354 .create = xsfs_create,
355 .destroy = xsfs_destroy,
356 .utime = xsfs_utime,
357 .symlink = xsfs_symlink,
358 .init = (void *)xsfs_init
359 };
Como se puede ver, su extremadamente Autoexplicativo. Un poco de búsqueda daría como resultado encontrar muchos ejemplos de archivos de base de implementaciones respaldadas FUSE también.
recomiendo hacerlo por completo en el espacio de usuario, a menos que tenga tiempo suficiente para llegar lo suficientemente familiarizado con el núcleo.
¿Podemos hacer algunas suposiciones aquí: No estamos haciendo un sistema de archivos real: es decir, no esperamos utilizar los comandos normales ls o dir para ver cosas. En su lugar estamos implementando un servicio que expone a los archivos a través de una interfaz personalizada a través de una toma de corriente. Estamos escribiendo las bibliotecas del servidor y del cliente. Los datos para el servidor se almacenan en un solo archivo. ¿Es esto correcto? –
homóloga pregunta un poco más genérica: http://stackoverflow.com/questions/4714056/how-to-implement-a-very-simple-filesystem –