Inotify

inotify – podsystem jądra Linuksa, który powiadamia o zdarzeniach w systemie plików. Został napisany przez Johna McCutchana z pomocą Roberta Love’a i później Amy Griffis w celu zastąpienia dnotify. Było zawarte w głównych wydaniach jądra Linuksa począwszy od wersji 2.6.13, a przy użyciu łat także w wersji 2.6.12 (być może jest to możliwe też we wcześniejszych wydaniach). Główną funkcją inotify jest rozszerzenie systemu plików o możliwość powiadamiania o zmianach w nim i raportowaniu tych zmian w aplikacjach.

Jego główne zastosowanie to użycie w narzędziach przeszukujących (ang. desktop search utilities) takich jak Beagle, gdzie może powiadamiać je o zmienionych plikach bez potrzeby częstego skanowania systemu plików (które byłoby bardzo nieefektywne). Informacje o zmianach w systemie plików są pobierane bezpośrednio z jądra systemu operacyjnego, dlatego zamiast aktywnego przeszukiwania odpowiednie narzędzia mogą indeksować zmiany kilka sekund po ich wystąpieniu, nie obniżając przy tym wydajności systemu.

Może być także używany do automatycznego uaktualniania widoków katalogów, ponownego wczytania plików konfiguracyjnych, logowania zmian, robienia kopii bezpieczeństwa i wszelkiego rodzaju synchronizacji.

Zalety

Inotify posiada kilka zalet w stosunku do dnotify, modułu jądra który zastąpił. W starszym module program musiał używać jednego deskryptora pliku na każdy monitorowany katalog. Oznaczało to możliwość szybkiego wyczerpania się limitu ilości deskryptorów pliku na proces. Dodatkowo używanie deskryptorów plików przez dnotify było problemem w przypadku, gdy system plików mieścił się na wyjmowalnym nośniku danych. Wtedy ten nośnik nie mógł być odmontowany, ponieważ otwarte deskryptory plików wskazywały na jego zajętość. Inna wada dnotify to niska ziarnistość monitoringu, tzn. można było kontrolować tylko zmiany na poziomie katalogów. By zbadać, co dokładnie się w danym katalogu zmieniło, trzeba było dodatkowo używać struktur stat. Programiści byli zmuszeni wtedy do utrzymywania kolekcji tych struktur i gdy następowała zmiana w danym katalogu, to trzeba było utworzyć nową strukturę stat w celu porównania jej z poprzednio utrzymywanymi i określeniu charakteru tych zmian.

Zasada działania

Inotify używa się za pomocą serii wywołań systemowych stworzonych dla inotify.

Na początku tworzy się instancję inotify,

int inotify_init()

które zwraca deskryptor pliku, z którego czytane są wszystkie zdarzenia. W celu obserwowania wybranego katalogu wywołuje się

int inotify_add_watch(int fd, const char* pathname, int mask)

które monitoruje węzeł systemu pliku inode wskazywany przez podaną ścieżkę pathname dla zdarzeń określonych za pomocą maski mask. Zwracany jest wtedy unikatowy (w ramach danej instancji) deskryptor monitorujący (ang. watch descriptor). Może tak się zdarzyć, że wiele ścieżek wskaże na ten sam węzeł inode/deskryptor monitorujący.

Wywołanie

int inotify_rm_watch(int fd, int wd)

usuwa monitoring wykonywany za pośrednictwem wskazanego deskryptora monitorującego wd.

Zdarzenia generowane przez inotify zawierają następujące informacje:

Identyfikator Zawartość
wd deskryptor monitorujący
mask znacznik zdarzenia
cookie cookie używanie do synchronizacji pomiędzy IN_MOVED_FROM and IN_MOVED_TO
len długość pola name
name opcjonalna nazwa pliku powiązanego z tym zdarzeniem (w danym katalogu nadrzędnym)

Wybrane zdarzenia, które można monitorować to:

  • IN_ACCESS – odczyt pliku
  • IN_MODIFY – ostatnia modyfikacja
  • IN_ATTRIB – zmiana atrybutów pliku
  • IN_OPEN i IN_CLOSE – otwarcie albo zamknięcie pliku
  • IN_MOVED_FROM i IN_MOVED_TO – gdy plik jest przenoszony lub zmienia mu się nazwę
  • IN_DELETE – kasowanie pliku/katalogu
  • IN_CREATE – tworzenie pliku/katalogu
  • IN_DELETE_SELF – monitorowany plik jest skasowany

Historia

Linki zewnętrzne

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.