user@devops:~$ cat README.md
inotify-watch
# Descripción
inotify-watch (cpp-inotify-watch) es un monitor de eventos del sistema de archivos de Linux escrito en C++23 sin dependencias que usa la API inotify(7) del kernel. 15 tipos de eventos decodificados: CREATE, MODIFY, ATTRIB, DELETE, MOVED_FROM/MOVED_TO, OPEN, ACCESS, CLOSE_WRITE/CLOSE_NOWRITE, DELETE_SELF, MOVE_SELF, UNMOUNT y Q_OVERFLOW, con deteccion del flag IN_ISDIR (eventos de directorio en negrita). Pairing de renames por cookie: MOVED_FROM y MOVED_TO comparten el campo cookie del kernel (unico por rename) y se muestran como una sola linea RENAME (a.txt -> b.txt). Watch recursivo (-r): inotify no es recursivo por naturaleza, la herramienta escanea el arbol con std::filesystem (recursive_directory_iterator con skip_permission_denied y limpieza de error_code por iteracion) y registra un watch por directorio. Mascara configurable (-m create,modify,delete,move,attrib,open,close,access,all) con validacion de nombres. Salida JSON por linea (--json) con {ts, type, path, dir, cookie} para scripting con jq. RAII sobre el fd de inotify con std::expected para manejo de errores sin excepciones, loop con poll() de 500ms que responde a Ctrl+C y --timeout N, y drenado no bloqueante de la cola (EAGAIN = fin). Modo demo (--demo) con flujo sintetico realista de un build de app para contenedores/VMs. 30 tests de auto-verificacion (--selftest) sobre eventos reales en un directorio temporal: create/modify/attrib/rename/delete, pairing por cookie, filtro de mascara, remove_watch, watch de archivo directo, watch recursivo en subdirectorio anidado y formato JSON. Cero dependencias: compilacion directa con g++ -std=c++23.
# Características principales
$ 15 tipos de eventos inotify decodificados: CREATE, MODIFY, ATTRIB, DELETE, MOVED_FROM/MOVED_TO, OPEN, ACCESS, CLOSE_WRITE/NOWRITE, DELETE_SELF, MOVE_SELF, UNMOUNT y Q_OVERFLOW
$ Pairing de renames por cookie del kernel: MOVED_FROM + MOVED_TO se emparejan por el campo cookie y se muestran como una sola linea RENAME (a.txt -> b.txt)
$ Watch recursivo (-r): inotify no es recursivo por naturaleza — escanea el arbol con std::filesystem (skip_permission_denied + error_code por iteracion) y registra un watch por directorio
$ Deteccion del flag IN_ISDIR: los eventos de directorio se marcan y se muestran en negrita (dir vs file)
$ Mascara configurable (-m create,modify,delete,move,attrib,open,close,access,all) con validacion de nombres
$ Salida JSON por linea (--json) con {ts, type, path, dir, cookie} para scripting con jq
$ RAII sobre el fd de inotify con std::expected (C++23), loop con poll() de 500ms, Ctrl+C y --timeout N, drenado no bloqueante de la cola (EAGAIN = fin)
$ Modo --demo sintetico para contenedores/VMs y 30 tests de auto-verificacion (--selftest) con eventos reales sobre un directorio temporal
# Galería
# Tecnologías utilizadas