Watch (gb.inotify)
Questa classe rappresenta un oggetto file system di monitoraggio.
Gli eventi di Inotify vengono segnalati in modo asincrono e il kernel non fornisce alcuna garanzia di aver consegnato gli eventi in modo tempestivo. Se ad esempio un file viene creato e quindi immediatamente eliminato in una directory che si sta monitorando, può accadere che si ottenga l'evento Create dopo che il file è già stato eliminato. Se non stai attento e provi a leggere il file indicato da
Watch.Name, il tuo programma andrà in crash con "Nessun file o directory".
Dovresti leggere la sezione "Limitazioni e avvertenze" della manpage di inotify (
man 7 inotify
). La stessa manpage è una buona fonte per altre informazioni.
Monitorare una directory NON è ricorsivo, cioè riceverai solo eventi dalla directory stessa e dalle sue voci immediate. Se vuoi approfondire, devi aggiungere manualmente watch ricorsivi.
Costanti
Proprietà statiche
Cookie
|
Un cookie utilizzato per associare eventi. Questo è attualmente utilizzato solo per connettere eventi MoveFrom e MoveTo dello stesso file.
|
IsDir
|
Indica se l'oggetto dell'evento è/era una directory.
|
Name
|
Il nome del file o della directory soggetto all'evento, relativo all'oggetto Watch che ha attivato l'evento. Se Null, la directory stessa è il soggetto.
|
Unmount
|
Restituisce se il filesystem su cui risiedeva il percorso controllato è smontato. In questo caso, l'oggetto Watch viene invalidato subito dopo l'evento.
|
Proprietà
Events
|
Restituisce una classe virtuale che specifica la maschera di bit per monitorare gli eventi.
|
IsPaused
|
Restituisce se il monitoraggio è in pausa.
|
Path
|
Restituisce il percorso osservato.
|
Tag
|
Questa variante è a disposizione del programmatore Gambas.
|
Metodi
Pause
|
Mette in pausa il monitoraggio, ovvero disabilita la generazione di eventi.
|
Resume
|
Riprende il monitoraggio se messo in pausa.
|
Eventi
Close
|
Questo evento viene sollevato quando il file monitorato o un file nella directory monitorata viene chiuso.
|
Create
|
Questo evento viene sollevato quando viene creato un file o una directory nella directory monitorata.
|
Delete
|
Questo evento viene sollevato quando una voce è stata eliminata dalla directory monitorata oppure se è stato eliminato il percorso stesso.
|
Move
|
Questo evento viene sollevato quando viene spostato il file o la directory monitorata.
|
MoveFrom
|
Questo evento viene sollevato dalla directory di origine quando viene spostato un file.
|
MoveTo
|
Questo evento viene generato dalla directory di destinazione quando viene spostato un file.
|
Open
|
Questo evento viene sollevato quando viene aperto il file monitorato o una voce della directory monitorata.
|
Read
|
Questo evento viene sollevato quando si accede al file monitorato o a una voce nella directory monitorata, ovvero lettura, esecuzione, ...
|
Stat
|
Questo evento viene sollevato quando cambiano gli attributi di file/metadati. Da $ man 7 inotify :
|
Write
|
Questo evento viene sollevato quando il file monitorato o la voce nella directory monitorata è stata modificata, ovvero scritta, troncata, ....
|
Le proprietà statiche vengono utilizzate per archiviare i dati dal kernel durante la gestione degli eventi. Usali solo nei gestori di eventi.
Esempio
Use "gb.inotify"
' La riga di sopra serve solo allo script Gambas, nell'IDE Gambas completo, vedi i Componenti del progetto.
Private $hWatch As Watch
Public Sub Main()
Dim sFile1 As String = Temp$(), sFile2 As String = Temp$()
$hWatch = New Watch(File.Dir(Temp$()), True) As "Watcher"
' Questa riga è ridondante: un oggetto Watch sovrascriverà automaticamente gli eventi per i quali esiste un gestore eventi!
' $hWatch.Events[Watch.Create Or Watch.Delete] = True
Print "I'm watching... "
' Crea due file
File.Save(sFile1, "abc")
File.Save(sFile2, "def")
Wait 0.1 ' enter event loop to see events
' Elimina un file
Kill sFile2
Wait 0.1
' Elimina il secondo file. L'evento Delete è stato annullato a questo punto (vedi Watcher_Delete), quindi per questo motivo non viene generato alcun evento.
Kill sFile1
Wait 1
Quit
End
Public Sub Watcher_Create()
Print "Create: " & Watch.Name
End
Public Sub Watcher_Delete()
Print "Delete: " & Watch.Name
' Non sovrascrive le cancellazioni dopo la prima.
Last.Events[Watch.Delete] = False
End
I'm watching...
Create: 1.tmp
Create: 2.tmp
Delete: 2.tmp