Newsgroup: it.comp.os.linux.development
Titolo: intercettare files cancellati

(messaggio gia scritto su it.comp.os.linux.sys  avevo sbagliato
groups)
Ciao a tutti
devo implementare un programma (demone) che dato un filesystem questo
ogni 60sec scrive su un file quali file sono stati cancellati e
modificati..
..ok..
 ho gia sviluppato questo programma con un ntree delle directory
ogni 60 secondi crea un ntree e lo confronta con l'ntree dei 60secondi
prima.
(poi ho fatto alcune facilitazioni per velocizzare la ricerca delle
differenze)
ecco le difficolta'
deve essere fatto in C , non posso usare inotify.
deve funzionare   su linux e win32.
il problema è che  per ogni nodo dell'albero è un file o una cartella
del ntree,
e per grandi filesystem è ingestibile creare un nodo per tutti i files
dell' hard disk !!
idee o soluzioni?
mi bastano anche solo idee.
grazie a tutti

 idee o soluzioni?
Se ho capito bene non puoi avvalerti delle notifiche del SO sulle
modifiche ai file e quindi devi procedere con un polling su ogni nodo
dell'albero.
Un primo problema che vedo e' che comunque su filesystem con un numero
elevato di file solamente percorrere tutto l'albero delle directory
puo' richiedere molto tempo e che se sei costretto a fare polling non
puoi impiegare meno di questo tempo.
Poi non ho ben capito se il tuo problema sono gli ntree.
In tal caso potresti usare una hashtable che associa un hash ricavata
dal full path e data di modifica del file/directory al full path del
file/directory. Poi potresti confrontare gli elementi di due hashtable
a 60 secodi di distanza e scoprire quali file sono cambiati. Nota che
il confronto si puo' dare in modo veloce usando qualche accorgimento.
Saluti,
The Librarian


Ahem... Adesso che ci penso bene mi sa che cosi' si peggiorano solo le
cose...
Pero' potresti, solo per le directory del tree, inserire nell'hash
table un hash generato da una stringa ottenuta concatenando tutti i
nomi e le date di modifica dei file nella directory e associare l'hash
al nome della directory.
Poi controlli la differenza tra le due hashtable e solo per le
directory che hanno hash differente procedi con controllare le
differenze tra i loro files.
Vista l'ora spero di non aver detto altre cavolate :)
Saluti,
The Librarian

è un ottima soluzione
ed è quella che ho usato io
senza hash table
ma solo con il valori hash che sono la concatenazione dei valori hash
dei filgi
ogni nodo ha path,md5,figli
la soluzione è costosa perche se si hanno due alberi
TreeA,TreeB
nel caso peggiore
devo vedere se tutti i nodi di A sono in B e se tutti i nodi di B sono
in A
costo nlogn*nlogn
pero' non ho capito come vorresti usare le hash table...
e dove posso reperire un esempio di ntree un po' piu professonale o di
hash table in rete ho cercato ma non ho trovato molto.
grazie
elgiei

 o di hash table in rete ho cercato ma non ho trovato molto.
Che linguaggio usi?
Saluti,
The Librarian

 deve essere fatto in C , non posso usare inotify.
e dnotify?

 modificati..
Prova a vedere se il modulo relayfs ti può aiutare. In questo modo dovresti
poter intercettare ogni singola operazione su disco.
Purtroppo non ti so dire il livello di complessita'

 dell' hard disk !!
Appunto :)
Luca
-- 
Soltanto un istante...
tuffarsi nell'infinito...
annegare senza pensieri


Eh lo so ..
la soluzione che ho trovato un albero con hash e sto cercando di usare
al posto della malloc la mmap ma ho grossi problemi di reallocazione e
di gestione.
se domani sera non ho risolto con mmap creero' un post..
Volevo ringraziarvi per il caloroso sostegno.
Elgiei