2010-02-03 15 views
7

Como un proyecto de universidad que necesito para poner en práctica un sistema de archivos básico dentro de un archivo. Entonces, ¿cómo hago esto? ¿Cuáles son las cosas que necesitaría saber? Los requisitos incluyen tener un proceso de daemon en segundo plano. También las aplicaciones que utilizan este sistema tienen que conectarse al servidor utilizando un socket de dominio Unixde aplicación del sistema de archivos básica

El sistema de archivos debe tener las siguientes características:

  1. archivos de lista almacenada junto con sus tamaños.
  2. Crear archivos
  3. Permitir a los cambios en los archivos
  4. Eliminar archivos
+0

¿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? –

+0

homóloga pregunta un poco más genérica: http://stackoverflow.com/questions/4714056/how-to-implement-a-very-simple-filesystem –

Respuesta

0

La forma más sencilla de hacerlo sería crear una plantilla para almacenar datos y analizar archivos en ram, por supuesto, esto no es lo más eficiente.

Algo así como ...

ALGUNOS/UBICACIÓN/Nombre >>> contenido del archivo aquí, bla, bla, bla < < < ALGUNOS/OTROS/UBICACIÓN/File2Name >>> contenido de otro archivo aquí < < <

a continuación, hacer una lista de un directorio, usando expresiones regulares encuentran todas las líneas que terminan en >>>, a continuación, analizar hasta la barra X (basado en el número de barras en la carpeta de búsqueda), y hacer una búsqueda sensible de caso (en), en función de si desea o no que sea sensible a mayúsculas y minúsculas. Por supuesto, como mencioné al cargarlo en la memoria, podría buscar una clave -> valor hashmap, que probablemente sería mucho más simple.

1

Un sistema de archivos es essetially una base de datos de archivos. Lo principal que necesitará es una tabla de búsqueda para almacenar compensaciones de bytes y longitudes de archivo. Los nombres de archivo también se pueden almacenar en la tabla o se pueden almacenar en los primeros bytes en cada desplazamiento. Será mucho más fácil para usted si hace que su sistema de archivos tenga un tamaño fijo.

Esto sería similar a cómo funciona el sistema de archivos FAT.

También puede echar un vistazo a http://en.wikipedia.org/wiki/Database_storage_structures ya que en los niveles más bajos los sistemas de archivos y bases de datos son muy similares.

3

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.

Cuestiones relacionadas