2010-11-01 4 views
5

Puoi spiegarmi il meccanismo di inotify? Ho cercato nel web, ma quello che ho capito è che se voglio vedere i cambiamenti in un file devo fare il polling con la funzione "read". Esiste una funzione di richiamata che mi avviserà quando il file ha una modifica senza polling?linux, inotify - come iscriversi?

Grazie,

risposta

0

No, inotify richiede il polling.

La registrazione di una richiamata tramite segnale (come suggerito), peggiora IMO, quindi esegue il polling regolare.

+0

preso atto, ma si può elaborare * perché * sarebbe peggio? :) –

+1

@ Frédéric Hamidi Un problema con i segnali è che non si combinano molto bene con le eccezioni. Il secondo problema è che i gestori del segnale dovrebbero fare il minimo lavoro possibile e ritornare. –

+2

Solo se attraverso le eccezioni dal gestore di segnale. E il fatto che i gestori del segnale dovrebbero fare il minimo lavoro possibile non significa che il sondaggio sia preferito. Ad esempio, il codice principale potrebbe creare una pipe, impostare il gestore di segnale, quindi selezionare sulla pipe. Il gestore del segnale scrive un singolo carattere sul tubo, quindi esce. la scrittura è async-signal-safe. Control ritorna al tuo codice principale e seleziona ritorni. Hai un gestore di segnale minimo e non è necessario il polling. – atomice

2

Sto speculando sul fatto che stai usando una libreria della GUI che gestisce gli eventi per te.

Le migliori librerie GUI consentono di visualizzare i descrittori di file. In GTK, è gtk_input_add_full; in Qt, QSocketNotifier potrebbe funzionare per voi.

+1

Corretti i collegamenti per te, con un po 'più di ripetizioni, non avrai problemi ad aggiungerli tu stesso. –

1

Le chiamate inotify utilizzano i descrittori di file. Anziché eseguire il polling, è possibile utilizzare i FD restituiti nella famiglia di chiamate select(). Non è esattamente una funzione di callback ma riduce il sovraccarico che ti interessa.