Inotify
Author
Albert Floresinotify je subsystém linuxového jádra, který poskytuje notifikaci o událostech v souborovém systému. Jeho autory jsou Robert Love a John McCutchan a vznikl proto, aby nahradil dnotify. Subsystém byl přidán do hlavního stromu jádra ve verzi 2.6.13, lze ho zakompilovat do verze 2.6.12 a možná i do dřívějších verzí pomocí patche. Jeho funkcí je v zásadě rozšíření souborových systémů tak, aby zachycovaly události na souborech a tyto změny byly předávány aplikacím.
Největší oblastí použití jsou tedy zřejmě utility pro desktopové hledání, jako je Beagle, protože funkcionalita inotify umožňuje přeindexovávat změny v souborech, aniž by se musel často procházet celý souborový systém, což by bylo velmi neefektivní. Protože se Beagle apod. +more o změně dozví na základě oznámení, nikoli aktivního procházení, může k přeindexování dojít velmi rychle (v řádu jedné sekundy) a s velmi malou režií. inotify tak umožňuje používat tyto programy velmi citlivě z hlediska celého systému - distributoři obecně nepřijímají démony, které by k poskytnutí určité funkcionality spotřebovávaly značnou část výkonu systému.
inotify lze použít také k automatickým aktualizacím pohledů na adresáře, načítání konfiguračních souborů, záznamu změn, zálohování, synchronizaci, uploadu apod.
Výhody
inotify má oproti technologii dnotify (kterou nahrazuje) mnoho výhod. U dnotify musel program používat pro každý sledovaný adresář jeden souborový popisovač (file descriptor). +more To se může stát úzkým hrdlem, protože počet popisovačů na proces je omezený. Další problém nastával s výměnnými médii. Protože byly při sledování na souborovém systému otevřeny popisovače, nešel tento souborový systém odpojit a médium vyjmout.
Podstatnou nevýhodou dnotify je také granularita - umožňuje totiž monitorovat pouze adresáře a navíc není k dispozici žádná bližší informace o události. Programátoři aplikací tedy musí uchovávat strukturu stat, po každé události načíst nová data a porovnat je s těmi uloženými.
inotify používá jednoduché a elegantní API, které skrze malý počet souborových popisovačů umožňuje programátorům používat rozhraní select nebo poll, což je mnohem komfortnější v porovnání se signálovým notifikačním systémem používaným dnotify. To také činí integraci s knihovnami založenými na těchto voláních (například GLib) mnohem snazší. +more Výhodou je také jemnější granularita - inotify má rozhraní založené na i-node.
Jak to funguje
inotify se používá prostřednictvím sady systémových volání vytvořených speciálně pro inotify.
int inotify_init
Vytvoří instanci inotify. Vrací souborový popisovač, ze kterého se budou číst veškeré události.
int inotify_add_watch (int fd, const char* pathname, int mask)
Zahájí sledování i-node identifikovaného zadanou cestou. Budou se sledovat události definované v masce. +more Vrací (v rámci instance unikátní) popisovač sledování určitého i-node (Poznámka: Na stejný i-node, a tedy stejný popisovač sledování, může ukazovat více souborových cest).
int inotify_rm_watch (int fd, int wd)
Zruší sledování podle daného popisovače.
Události generované subsystémem inotify obsahují tyto informace:
Identifikátor | Obsah |
---|---|
wd | popisovač sledování |
mask | maska událostí |
cookie | hodnota použitá k synchronizaci dvojice událostí IN_MOVED_FROM a IN_MOVED_TO |
len | délka řetězce s názvem |
name | název souboru, na kterém nastala událost (při sledování adresáře) |
Toto jsou některé z událostí, které lze sledovat: * IN_ACCESS - čtení souboru * IN_MODIFY - změna souboru * IN_ATTRIB - změna atributů souboru * IN_OPEN a IN_CLOSE - otevření, resp. zavření souboru * IN_MOVED_FROM a IN_MOVED_TO - přesun souboru * IN_DELETE - smazání souboru (ve sledovaném adresáři) * IN_CREATE - vytvoření souboru (ve sledovaném adresáři) * IN_DELETE_SELF - smazání sledovaného souboru
Historie
srpen 2005 - začlenění do 2.6.13 * červenec 2004 - [url=http://groups.google.com/group/fa.linux.kernel/browse_thread/thread/6366aaa10cb23bcc/a54e97d545ad66fe]ohlášení první verze[/url]
Externí odkazy
[url=http://inotify-tools. sourceforge. +morenet]inotify-tools[/url] Sada uživatelských utilit založených na inotify - umožňují sledovat a zaznamenávat změny souborů a adresářů * [url=https://web. archive. org/web/20100326040836/http://trac. dbzteam. org/pyinotify]Pyinotify[/url] inotify rozhraní pro jazyk Python * [url=http://www. kernel. org/pub/linux/kernel/people/rml/inotify/README]Official inotify README[/url] * [url=http://www. linuxjournal. com/article/8478]Kernel Korner [/url] - Intro to inotify by Robert Love (2005, anglicky) * [url=http://lwn. net/Articles/104343/]LWN Article on Inotify[/url] Watching filesystem events with inotify (anglicky, částečně zastaralé) * [url=http://www-128. ibm. com/developerworks/linux/library/l-inotify. html]IBM Article[/url] Monitor Linux file system events with inotify (anglicky, zastaralý článek) * [url=http://jnotify. sourceforge. net/]JNotify[/url] „Java knihovna, která umožňuje aplikacím v jazyce Java poslouchat události v souborovém systému. “ * [url=http://inotify-cxx. aiken. cz/]inotify-cxx[/url] C++ rozhraní k inotify. * [url=http://incron. aiken. cz/]incron[/url] Systém inotify cron. Pracuje jako normální cron, ale ke spouštění úloh místo časových period používá události v souborovém systému.