2010-11-01 4 views
5

Pouvez-vous m'expliquer le mécanisme inotify? J'ai cherché sur le web à ce sujet, mais ce que j'ai compris est que si je veux voir les changements dans un fichier, je dois faire l'interrogation avec la fonction "lire". Y at-il une fonction de rappel qui me notifiera quand le fichier a une modification sans interrogation?linux, inotify - comment s'abonner?

Merci,

Répondre

0

Non, inotify nécessite une interrogation.

L'enregistrement d'un rappel à l'aide d'un signal (comme suggéré) est pire que l'interrogation régulière de l'OMI.

+0

pris bonne note, mais pouvez-vous élaborer * pourquoi * ce serait pire? :) –

+1

@ Frédéric Hamidi Un problème avec les signaux est qu'ils ne se mélangent pas très bien avec des exceptions. Le deuxième problème est que les gestionnaires de signaux doivent faire un minimum de travail et revenir. –

+2

Seulement si vous traversez des exceptions du gestionnaire de signal. Et le fait que les gestionnaires de signaux doivent faire le moins de travail possible ne signifie pas que l'interrogation est préférée. Par exemple, votre code principal pourrait créer un tuyau, configurer le gestionnaire de signal, puis sélectionner sur le tuyau. Le gestionnaire de signal écrit un seul caractère dans le tube puis quitte. write est async-signal-safe. Le contrôle retourne à votre code principal et sélectionne les retours. Vous avez un gestionnaire de signal minimal et vous n'avez pas besoin d'interroger. – atomice

2

Je suppose que vous utilisez une bibliothèque GUI qui gère les événements pour vous. Les meilleures bibliothèques GUI ont un moyen de regarder les descripteurs de fichiers. Dans GTK, c'est gtk_input_add_full; en Qt, QSocketNotifier pourrait travailler pour vous.

+1

Correction des liens pour vous, avec un peu plus de rep, vous n'aurez aucun problème pour les ajouter vous-même. –

1

Les appels inotify utilisent des descripteurs de fichiers. Plutôt que d'interroger, vous pouvez utiliser les FD retournés dans la famille d'appels select(). Ce n'est pas exactement une fonction de rappel mais cela réduit les frais généraux qui vous intéressent.

Questions connexes