Ecco an example di un'implementazione FUSE molto semplice, supportata da un segmento di memoria condivisa glorificato (xenstore). È un fork del sistema di file FUSE xenstore originale che mantengo.
Troverete anche del codice per mostrare come rendere Valgrind più utile durante il debug delle implementazioni di FUSE.
si scrivono funzioni per aprire/creare/leggere/scrivere/troncare/getattr/etc e passano loro di fondere (numeri di riga sono dall'esempio collegato):
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 };
Come si può vedere, la sua estrema auto esplicativo. Un po 'di ricerca risulterebbe nel trovare molti esempi base di file con le implementazioni di FUSE.
Consiglio vivamente di farlo interamente nello spazio utente, a meno che non si abbia abbastanza tempo per acquisire familiarità con il kernel.
fonte
2010-02-04 10:41:14
Qui possiamo fare alcune ipotesi: Non stiamo facendo un vero filesystem: cioè, non ci aspettiamo di usare i normali comandi ls o dir per vedere le cose. Invece stiamo implementando un servizio che espone i file attraverso un'interfaccia personalizzata su un socket. Stiamo scrivendo sia il server che le librerie client. I dati per il server sono memorizzati all'interno di un singolo file. È corretto? –
Simile domanda leggermente più generica: http://stackoverflow.com/questions/4714056/how-to-implement-a-very-simple-filesystem –