Klara Systems analiza un problema habitual al portar utilidades Linux a FreeBSD: la monitorización de archivos con la herramienta inotifywait. Un cliente necesitaba ejecutar una acción tras subir ficheros por SCP, y aunque la solución funcionaba en la mayoría de los casos, en ocasiones no se emitía la notificación CLOSE. La causa se encuentra en la biblioteca libinotify.so de FreeBSD, que reimplementa en espacio de usuario la interfaz inotify de Linux apoyándose en el filtro EVFILT_VNODE de kqueue.
El artículo compara ambas API con ejemplos de código en C. La versión basada en inotify resulta directa: se crea un descriptor con inotify_init(), se añade el directorio con inotify_add_watch() especificando IN_CLOSE y se leen los eventos en un bucle. La versión con kqueue y EVFILT_VNODE es notablemente más compleja, ya que EVFILT_VNODE opera sobre descriptores de fichero individuales, no sobre árboles completos. Para vigilar un directorio hay que recorrerlo, abrir cada archivo, asignar una estructura de seguimiento y registrarlos en el kqueue; además, hay que reescanejar el directorio cuando se reciben eventos NOTE_WRITE o NOTE_RENAME/NOTE_DELETE.
El texto es por tanto una guía técnica para desarrolladores que portan software de Linux a FreeBSD o que necesitan reemplazar libinotify por llamadas nativas al kernel, explicando los compromisos entre la simplicidad de inotify y la mayor complejidad pero integración directa de kqueue.
