¿Se puede utilizar inotify para ver si se crea un file específico sin supervisar todo el directory?

Quiero recibir una notificación cuando se crea un nombre de file específico. Estoy viendo inotify . El indicador IN_CREATE está disponible para monitorear un directory por cualquier cambio dentro de él, pero preferiría no monitorear todo el directory ya que puede haber mucha actividad en ese directory además del file que me interesa. ¿Puede ser esto? ¿hecho?

No puede hacer que el kernel solo le informe de un cambio en una ruta determinada. Las razones son un poco sutiles:

  • En Linux, un object de file existe independientemente de cualquier nombre (s) que pueda tener. Los nombres de los files son en realidad attributes de su directory contenedor, y un único file puede ser llamado por varios nombres (ver, enlace fuerte).

  • El kernel tiene que tener algo para adjuntar a los objects; no puede adjuntar un object a un nombre de ruta ya que un nombre de ruta no es un object real del sistema de files; tiene que adjuntar al directory principal o al file que describe esa ruta. Pero no puede adjuntarlo al file, porque está mirando para ver si se creó un file con un nombre dado, no cambios en un file determinado.

Teóricamente, el kernel podría implementar una API que le permita seleccionar events para un nombre de ruta dado al agregar un reloj a un directory, de la misma manera que le permite seleccionar types de events. Esto engordaría la API, y el kernel al final estaría procesando los mismos datos y haciendo la misma comparación de cadenas que estarías haciendo en el espacio de usuario.

¿Hay un golpe de performance notable para colocar un reloj en un directory muy activo? No estoy seguro de cuán activo te refieres; decenas de files por segundo, cientos, millones?

En cualquier caso, evitaría el access : siempre va a ser racimo. Se puede crear y eliminar un file entre llamadas para access , y el access llamadas en un ciclo muy cerrado va a ser lento, y el tipo de problema que inotify fue diseñado para resolver.