Salve ragazzi,
stavo scrivendo un po' di codice per tenere d'occhio un file.
Ho pensato di utilizzare inotify per tracciare gli eventi su un singolo file.

Il mio obiettivo è tracciare quattro tipi di eventi: modifica attributi, modifica, cancellazione del file e spostamento del file usando rispettivamente i flag IN_ATTRIB, IN_MODIFY, IN_DELETE_SELF e IN_MOVE_SELF. Inoltre il file è aperto in lettura.

La modifica del file, modifica attributi e spostamento vengono rilevati mentre la cancellazione (con rm, unlink) non viene rilevato con evento IN_DELETE_SELF ma IN_ATTRIB.

Ho notato anche che la modifica del file con un editor (nel mio caso vi) non riporta un evento modify ma un move e un attrib (forse perche vi crea un file in /tmp e poi lo sposta sul'originale?)


Ho effettuato alcune prove per verificare questo comportamento. Ho rimosso il flag IN_ATTRIB dai flag e non inotify non riesce nemmeno a rilevare l'evento.

Ho provato anche a cambiare il flag da IN_DELETE_SELF in IN_DELETE (per le dir) ma nulla.

Dato che su questo specifico file è aperto un file descriptor, e avendo letto che il delete_self non viene rilevato con un fd aperto sul file, ho provato anche a non aprire il file in lettura (per altre operazioni) senza esito positivo.

Ho provato anche a cambiare la tipologia di "watch",ovvero monitorare la directory invece del singolo file e cambiando IN_MOVE_SELF e IN_DELETE_SELF con IN_DELETE e IN_MOVE e tutto funziona a dovere. L'unico problema è che il watch su tutta la directory non "traccia" solo il file interessato ma tutti gli altri quindi poi devo andare a controllare in struct event -> name se il file è quello interessato. Dato che potrebbero esserci molti file vorrei evitare che ad ogni evento sulla dir, il programma debba controllare molte volte per quale file è stato ricevuto l'evento.


Al momento per la cancellazione del file ho tralasciato la problematica dell'IN_DELETE_SELF, e considero solo il FLAG IN_ATTRIB. Quindi se ricevo l'evento per ATTRIB verifico anche se il file esiste (con access) e cosi via.

Ho cercato, girato e sudato ma non ho trovato nulla. Qualcuno sa da cosa può dipendere il problema della cancellazione?

Inoltre, vi viene in mente qualche modo esotico di moficare le proprietà (elencate sopra) di un file?

Scusate la lunghezza e grazie in anticipo.

Alessandro.

Rispondere a