Wie kann man Änderungen in einem Verzeichnis mit kqueue () optimal überwachen?

8

OK: Ich implementiere die Dateifreigabe in einer iPhone OS App, und natürlich bedeutet das Dateisystemüberwachung. Yay!

Grundsätzlich kopiert und / oder löscht das Betriebssystem ein Verzeichnis, auf das ich zugreifen kann, wenn der Benutzer Dateien in den Abschnitt meiner App in iTunes ändert. Daher muss ich das Verzeichnis auf Änderungen überwachen, vermutlich über einen effizienten Mechanismus wie kqueue() .

Wie implementiere ich das, damit ich weiß, dass die Dateien fertig sind? Ich dachte nach dem Motto:

  • Überwachen Sie mit kqueue() .
  • Bei Ereignis Start (oder Zurücksetzen vorhanden) Timeout.
  • Wenn die Zeitüberschreitung abläuft, sollten Sie arbeiten.

Aber gibt es einen besseren Weg, um sicherzustellen, dass ich nicht über die Zehen des OS trete?

    
millenomi 04.06.2010, 08:34
quelle

1 Antwort

3

Dies ist nur eine Teilantwort, könnte aber etwas nützlich sein.

  1. Der kqueue-Mechanismus funktioniert tatsächlich, um benachrichtigt zu werden, wenn das Dokumentenverzeichnis einer App geändert wird.

  2. Die Benachrichtigung wird angezeigt, sobald das Verzeichnis geändert wurde und bevor das Kopieren einer Datei abgeschlossen ist. Ich habe das beim Testen beobachtet.

Leider gibt es keine Benachrichtigung, wenn die Kopie fertig ist. Zumindest keine, die ich gefunden habe.

Was ich hoffe, wird Apple erkennen, dass es eine Benachrichtigung für "iTunes synch" geben muss, denn das scheint ein generelles Problem zu sein.

Eine Schleife, die prüft, ob die Modifikationszeit der neuen Datei sich nicht ändert, könnte funktionieren, aber nur die meiste Zeit. Unter extremen Umständen kann iOS im Hintergrund alle möglichen zeitraubenden Arbeiten unterbrechen.

Wenn es eine Möglichkeit gibt zu überprüfen, ob eine bestimmte Datei von einem anderen Prozess geöffnet wurde, dann wäre das ausreichend.

Geoff

    
user430156 25.08.2010, 00:53
quelle