Каков оптимальный способ контролировать изменения в каталоге с помощью kqueue ()?

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

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Джефф

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top