inotify 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. 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). 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ší. 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. 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 2004ohlášení první verze

Reference

Externí odkazy inotify-tools Sada uživatelských utilit založených na inotify – umožňují sledovat a zaznamenávat změny souborů a adresářů Pyinotify inotify rozhraní pro jazyk Python Official inotify README Kernel Korner – Intro to inotify by Robert Love (2005, anglicky) LWN Article on Inotify Watching filesystem events with inotify (anglicky, částečně zastaralé) IBM Article Monitor Linux file system events with inotify (anglicky, zastaralý článek) JNotify „Java knihovna, která umožňuje aplikacím v jazyce Java poslouchat události v souborovém systému.“ inotify-cxx C++ rozhraní k inotify. incron 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.

Kategorie:Linux