# Gamin the File Alteration Monitor

## Internals

Main Menu

- Home
- Overview
- Using gamin
- Configuration
- News
- Downloads
- Python bindings
- Developers informations
- Contacts
- FAQ
- Debugging Gamin
- Security
- Internals
- Differences from FAM
- ChangeLog

Related links

- Mail archive
- FAM project
- sources
- GNOME Bugzilla
- Red Hat Bugzilla

gamin uses a client server model, this is in a large measure justified by the inappropriate dnotify kernel API way to signal modification events to an application but also to share kernel signal when multiple application monitors the same resource. It also allow to fine tune and filters event flow in the daemon, potentially minimizing resource consumption in applications.

Internally the gam_server maintain various data structures:

- A tree of monitored nodes, using both GamNode structure containing specific informations (like the path, the subscriptions list for that node, monitoring data and whether it's a directory), the tree itself is based on a GNode N-ary tree.
- Per connection data (GamConnData) one per connected socket. The data includes state, connection informations (file descriptor, Glib I/O Channel, pid of the application), and potential unprocessed yet data request from the socket.
- Listener information, keeps the list of subscriptions for the connected application, this could probably be merged in the connection data.
- For each path monitored by an application, a specific GamSubscription structure is maintained. The subscriptions are referenced both from the monitored nodes tree and from the listeners.

Daniel Veillard