2008-09-14 7 views

Respuesta

28

usuarios de Linux pueden utilizar inotify

inotify es un subsistema del kernel de Linux que proporciona de eventos del sistema de archivos notificación.

Algunas golosinas para Windows becarios:

+0

Sí, pude hacerlo funcionar para eso. Es un poco extraño, con una lectura de bloqueo() - pero al menos no hay latencia (¡más bien, no hay sondeo!). –

1

No creo que POSIX tenga las herramientas para eso. Lo más parecido a multiplataforma que he visto es FAM, que parece funcionar para Linux, BSD e Irix, pero no soy lo fácil que sería portarlo a Windows y MacOS.

0

Creo que OS X ahora tiene ganchos/devoluciones de llamada apropiados porque fueron necesarios para la indexación de Spotlight.

En Linux tendrá el problema adicional de que hay varios sistemas de archivos de uso común. Si necesita la funcionalidad solo para una cantidad limitada de archivos/directorios, trataría de buscar activamente modificaciones a intervalos regulares.

17

La biblioteca Qt tiene una clase QFileSystemWatcher que proporciona notificaciones de plataforma cruzada cuando un archivo cambia Incluso si no está utilizando Qt, porque la fuente está disponible, podría echarle un vistazo como muestra para su propia implementación. Qt tiene implementaciones separadas para Windows, Linux y Mac.

0

libevent o libev parecen ser lo que quieres, aunque no los he usado.

+0

ninguna de esas bibliotecas hace lo que el OP solicitó: son bibliotecas para crear incluso software impulsado, como IO de red que no bloquean, por ejemplo. –

1

En realidad, he desarrollado este sistema antes para utilizarlo en una base de código comercial C++; siempre que no necesite todo lo extraño bajo el sol, los sistemas Windows y POSIX tienen mucha superposición que puede abstraer.

POSIX: Use inotify: es un sistema completo construido literalmente para este trabajo
Windows: utilice "eventos de cambio". Tienes que construir más pegamento e informarte (todas las API que necesitas están disponibles, simplemente no te da la opción 1-stop-shopping inotify).

Las cosas comunes que se pueden detectar en su "hilo de notificación" para la transmisión de eventos son:
1) Básicamente cualquier operación invasiva impulso :: sistema de archivo soporta, con la posible excepción() de permisos de modificación. Esto es cosas como mover, crear, borrar, copiar carpetas y archivos.
2) Lee y escribe en archivos (especialmente escrituras). Tenga en cuenta que si está utilizando la E/S asíncrona, las notificaciones pueden aparecer desordenadas.
3) Cuando aparece un nuevo volumen, como alguien conectando una unidad flash.

inotify, especialmente, le ofrece un nivel insano de control fino, Windows menos. Con inotify puede controlar literalmente todo lo que el sistema de archivos está haciendo en tiempo casi real si realmente lo desea. Sé que el # 3 es posible con ambos sin votación, pero tenga en cuenta que puede ser realmente complicado hacer que funcione correctamente, en cualquier sistema.

Cuestiones relacionadas