2010-06-04 13 views
8

OK: estoy implementando el uso compartido de archivos en una aplicación de sistema operativo de iPhone, y por supuesto esto significa monitoreo de sistema de archivos. ¡Hurra!¿Cuál es la forma óptima de supervisar los cambios en un directorio con un kqueue()?

Básicamente, el sistema operativo copia y/o elimina desde y hacia un directorio al que puedo acceder cuando el usuario manipula los archivos en la sección de mi aplicación en iTunes. Por lo tanto, necesito monitorear el directorio para detectar cambios presumiblemente a través de un mecanismo eficiente como un kqueue().

¿Cómo implemento esto para que sepa que los archivos han terminado de copiarse? Estaba pensando en la línea de:

  • Monitor con kqueue().
  • En el evento, inicie (o restablezca el existente) el tiempo de espera.
  • Cuando pasa el tiempo de espera, funciona.

pero hay una mejor manera de hacerlo que asegura que no estoy pasando por encima de los dedos de los pies del sistema operativo?

Respuesta

3

Esto es solo una respuesta parcial, pero puede ser algo útil.

  1. El mecanismo kqueue de hecho funciona como un medio para recibir una notificación cuando se modifica directorio de documentos de una aplicación.

  2. La notificación llega tan pronto como se modifica el directorio y antes de que se complete la copia de un archivo. Lo he observado en las pruebas.

Desafortunadamente, no hay forma de notificación cuando se realiza la copia. Al menos, ninguno que haya encontrado.

Lo que espero que Apple se dé cuenta es que debe haber una notificación para que se complete la "sincronización de iTunes", porque esto parece ser un problema general.

Un bucle comprobar si el tiempo de modificación del nuevo archivo no está cambiando podría funcionar, pero la mayoría de las veces. En algunas circunstancias extremas, iOS puede hacer una pausa para hacer todo tipo de trabajo que consume mucho tiempo en segundo plano.

Si hay una manera de comprobar si un archivo particular está abierto por otro proceso, entonces esto sería suficiente.

Geoff

Cuestiones relacionadas