Cómo ser notificado de archivo/directorio cambio en C/C++, idealmente utilizando POSIX

StackOverflow https://stackoverflow.com/questions/61253

  •  09-06-2019
  •  | 
  •  

Pregunta

El tema lo dice todo - normalmente fácil y cruz de la plataforma de manera que es a la encuesta, de forma inteligente.Pero cada sistema operativo tiene algún medio para notificar sin votación.Es posible que en un razonablemente la plataforma de la cruz manera?(Yo sólo se preocupan realmente de Windows y Linux, pero yo uso mac, así que pensé posix puede ayudar?)

¿Fue útil?

Solución

Los usuarios de Linux pueden utilizar inotify

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

Algunas golosinas para Windows becarios:

Otros consejos

La biblioteca Qt tiene un QFileSystemWatcher de la clase que proporciona la plataforma de la cruz notificaciones cuando un archivo cambios.Incluso si usted no está usando Qt, porque la fuente está disponible, usted puede tener una mirada en ella como un ejemplo para su propia aplicación.Qt tiene distintas versiones para Windows, Linux y Mac.

No creo POSIX sí tiene recursos para eso.El más cercano a la cruz-plataforma que he visto es FAM, que parece funcionar para Linux, BSD, y Irix, pero no estoy en lo fácil que sería para portarlo a Windows y MacOS.

De hecho, he construido este sistema antes de su uso en un comercial de código C++ de la base mientras usted no necesita extraño cada cosa bajo el sol, las Ventanas y los sistemas POSIX tiene una gran cantidad de solapamiento que puede abstracto.

POSIX:El uso de inotify - es todo un sistema, literalmente construido para este trabajo
Windows:El uso de "eventos de cambio".Usted tiene que construir más de la cola y la presentación de informes a ti mismo (todas las APIs que lo necesitan, no sólo no es el 1-stop-shopping inotify le da).

Las cosas comunes que se pueden detectar en su "notificación de rosca" por el desvío de eventos son:
1) que, Básicamente, cualquier invasor operación boost::sistema de archivos compatible con la (posible) a excepción de la modificación de los permisos.Esto es cosas como mover, crear, eliminar, copiar carpetas y archivos.
2) Lee y escribe archivos (esp.escribe).Tenga en cuenta que si usted está utilizando async e/S de las notificaciones pueden mostrar fuera de la orden.
3) Cuando un nuevo volumen, como alguien de la conexión de una unidad flash.

inotify especialmente le da un nivel locura de un control de grano fino, Windows, menos.Con inotify usted, literalmente, puede controlar todo el sistema de ficheros está haciendo en tiempo cuasi-real, si usted realmente desea.Sé #3 es posible con ambos sin votación, pero hay que ser conscientes de que puede ser muy difícil conseguir que funcione correctamente en cualquier sistema.

Creo que OS X ahora se ha apropiado de los ganchos/devoluciones de llamada porque eran necesarios para la indexación de Spotlight.

En linux tendrás el problema adicional de que hay múltiples sistemas de archivos usados comúnmente.Si usted necesita la funcionalidad de sólo una cantidad limitada de los archivos/directorios, que iba a tratar sobre buscando activamente modificaciones a intervalos regulares.

libevent o libev parece ser que lo quieres, aunque yo no lo he usado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top