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.