Каков оптимальный способ отслеживания изменений в каталоге с помощью kqueue ()? - PullRequest
8 голосов
/ 04 июня 2010

ОК: я реализую общий доступ к файлам в приложении для iPhone OS, и, конечно, это означает мониторинг файловой системы. Ура!

По сути, ОС копирует и / или удаляет из и в каталог, к которому я могу получить доступ, когда пользователь манипулирует файлами в разделе моего приложения в iTunes. Таким образом, мне нужно отслеживать каталог на предмет изменений, предположительно, с помощью эффективного механизма, такого как kqueue().

Как мне это реализовать, чтобы я знал, что файлы закончили копирование? Я думал так:

  • Монитор с kqueue().
  • В случае запуска (или сброса существующего) тайм-аута.
  • Когда истечет время ожидания, работайте.

но есть ли лучший способ сделать это, гарантирующий, что я не переступлюсь через пальцы ОС?

1 Ответ

3 голосов
/ 25 августа 2010

Это только частичный ответ, но может быть несколько полезным.

  1. Механизм kqueue действительно работает как средство уведомления при изменении каталога документов приложения.

  2. Уведомление приходит, как только каталог изменен и до завершения копирования файла. Я наблюдал это в тестировании.

К сожалению, нет никакой формы уведомления, когда копия сделана. По крайней мере, ничего, что я нашел.

Я надеюсь, что Apple поймет, что должно быть уведомление об «синхронизации iTunes», потому что это, похоже, общая проблема.

Проверка цикла, если время изменения нового файла не меняется, может работать, но только большую часть времени. В некоторых экстремальных ситуациях iOS может приостановить выполнение всех видов трудоемкой собственной работы в фоновом режиме.

Если есть способ проверить, открыт ли конкретный файл другим процессом, этого будет достаточно.

Geoff

...