2010-01-14 22 views
10

Me gustaría exponer la configuración y las estadísticas de mi programa de una manera 'todo es un archivo' - más o menos cómo/proc/y/sys/funciona.Escribir mi propia interfaz 'todo es un archivo'

Como ejemplo, imagine por un momento que apache2 tenía este tipo de interfaz. A continuación, sería capaz de hacer algo como esto (hipotética):

cd /apache2/virtual_hosts 
mkdir 172.20.30.50 
cd 172.20.30.50 
echo '/www/example1' > DocumentRoot 
echo 'www.example1.com' > ServerName 
echo 1 > control/enabled 
cat control/status 
    enabled true 
    uptime 4080 
    hits 0 

Ahora, ¿existen tutoriales o similar sobre cómo hacer esto? Principalmente estoy buscando técnicas para 'pretender ser un archivo o directorio'. Estoy en Linux, POSIX u otro método más portátil sería preferible, pero no obligatorio.

+3

En Linux, probablemente necesite ver Fuse (http://fuse.sourceforge.net/) – jldupont

Respuesta

10

En Linux, eche un vistazo a Fuse: implemente un sistema de archivos completamente funcional en un programa de espacio de usuario.

  • biblioteca API simple
  • Instalación simple (sin necesidad de parchear o recompilar el kernel)
  • aplicación Secure
  • espacio de usuario - interfaz del núcleo es muy eficiente
  • utilizable por usuarios no privilegiados
  • Se ejecuta en los kernels de Linux 2.4.X y 2.6.X
  • Ha demostrado ser muy estable en el tiempo

Mira plataformas compatibles here. En términos de tutorial, uno de los buenos con los que me he encontrado es here.

+0

gracias, se ve bien. –

4

Además de FUSE, otra solución es exportar un sistema de archivos 9p. wmii hace esto, por ejemplo.

+2

Esa es una gran idea. La lectura de Plan9 fue realmente la razón por la que empecé esta idea de todos modos. –

+0

Si desea ir a la ruta 9p, eche un vistazo a http://kyuba.org/libduat - una biblioteca para implementar sistemas de archivos 9p. – camh

+0

Gracias. También descubrí que debian tiene un paquete 9mount para montar v9fs. –

1

Quizás la forma de hacer esto sea simplemente usar archivos "reales" y usar una biblioteca de notificación de cambio (inotify preferred) para detectar cuándo cambian y actualizar su comportamiento en consecuencia.

Los/proc y/sys son para la comunicación kernel-usuario y no son realmente para IPC de programas de espacio de usuario; se espera que use canalizaciones con nombre, sockets, memoria compartida, etc. para eso.

(ab) usar FUSE no es realmente una buena idea en este caso, creo.

+0

Espero mucha interacción con otros programas, y en este caso se ajusta bien a la factura. También tengo curiosidad y me gustaría aprender cómo hacer esto. –

+0

Y otra razón por la que me gustaría hacer esto es porque estoy harto de tener tantas interfaces de monitoreo diferentes para diferentes programas, y he empezado a tomar la postura de que esto realmente pertenece al FS. –

Cuestiones relacionadas