Академический Документы
Профессиональный Документы
Культура Документы
Daca trebuie sa monitorizezi mai multe FTP dropbox-uri pentru datele de intrare, s-ar putea scana
fiecare director tinta cu o comanda find pentru a enumera ce este nou. Cu toate acestea, desi
operatiunea pare inofensiva pentru sistem, fiecare invocare ruleaza un nou shell impreuna cu comanda
find in sine, care necesita multe apeluri de sistem pentru a deschide directorul, pentru a-l scana s.a.m.d.
Solutia optima pentru a face acest lucru este folosirea metodei inotify. Inotify este o
caracteristica a kernel-ului Linux care monitorizeaza sistemul de fisiere si alerteaza o aplicatie in legatura
cu evenimentele relative cum ar fi: stergere, citire, scriere chiar si o operatie de unmount a unui volum
de date. Puteti de asemenea urmari originea si destinatia modificarilor.
Folosirea inotify presupune: crearea unui descriptor de fisiere, atasarea unuia sau a mai multor
watch-uri (un watch este o cale si un set de evenimente) si folosirea metodei read() pentru a primi
informatiile de la decriptoru de fisiere. Deoarece Inotify functioneaza printr-un descriptor de fisiere
traditional, puteti folosi apelul de sistem select() pentru a monitoriza pasiv watch-urile si o alta
multitudine de surse de intrare in acelasi timp. Ambele abordari ( file descriptor si multiplexarea cu
ajutorul select ) evita busy polling ( poll = asteptarea unor event-uri pentru un file descriptor ).
Inotify prevede trei apeluri de sistem pentru a construi toate tipurile de monitoare de sisteme de fisiere:
Sunt necesare, de asemenea apelurile de sistem: read() si close(). Apelul read() asteapta alertele
generate de inotify_init(). Apelul close() sterge si elibereaza toate watch-urile active, chiar si memoria
asociata cu instant inotify.
#define BUF_LEN
( 1024 * ( EVENT_SIZE + 16 ) )
Aplicatia creeaza o instant de inotify si adauga un watch pentru a monitoriza modificarile din
/home/clawdiu. Metoda read() blocheaza pana cand una sau mai multe alerte sosesc. Specificatiile alertei
(fiecare fisier / eveniment) sunt transmise ca un flux de octeti, prin urmare, loop-ul din aplicatie
transforma fluxul de octeti intr-o serie de structuri de evenimente
struct inotify_event
{
int wd;
uint32_t mask;
uint32_t cookie;
uint32_t len;
char name __flexarr;
}
Acest tool este foarte folositor deoarece totul in Linux este fisier, deci fara niciun dubiu se pot
face foarte multe lucruri cu inotify watches.