Intercettare dati inviati al programma dal sistema o da altri programmi utilizzati
Casi in cui l'applicativo riceve dati non previsti e non richiesti
In taluni casi il sistema (ad esempio quando si tenta di accedere ad un file protetto; etc.) o applicazioni non-Gambas presenti nel sistema e comunque utilizzate dall'applicativo Gambas possono inviare, ancorché non richiesto espressamente dal codice dell'applicativo, dei messaggi e degli avvisi all'applicativo medesimo .
Il programma Gambas può intercettare tali dati in tempo reale |1|. Si dovrà individuare preliminarmente il numero ID del processo del programma Gambas, e si andrà a gestire in lettura il suo file descriptor num. 1, dal quale si leggerà con il comando bash: cat. Bisogna sottolineare che per poter leggere il file descriptor n. 1 associato al processo del programma è necessario cambiare i suoi permessi.
Il programma che riceve i dati dal sistema è capace di intercettarli dalla propria console solo se è un eseguibile. Qualora si stia facendo un test con un progetto Gambas, non è possibile con il codice far intercettare all'applicativo-progetto i dati che riceve dal sistema. In questo secondo caso si dovrà utilizzare un secondo programma Gambas che vada a leggere il file descriptor n. 1 del processo del programma-progetto principale Gambas.
L'applicativo Gambas avrà, dunque, codice di questo tenore:
Private pr As Process Public Sub Form_Open() pr = Shell "cat < /proc/numero_del_processo/fd/1" For Read As "pr" End Public Sub pr_Read() Dim s As String Line Input #pr, s TextArea1.Text = s End
Riprendendo questo codice, facciamo un esempio pratico:
Private pr As Process Public Sub Form_Open() pr = Shell "cat < /proc" &/ CStr(Application.Id) &/ "fd/1" For Read As "pr" End Public Sub pr_Read() TextArea1.Text &= pr.ReadLine() & Chr(10) End Public Sub Button1_Click() ' Per l'esperimento inserire questo file-device o comunque altro file "protetto": Shell "cat > /dev/ttyS2" End
Casi in cui l'applicativo Gambas riceve dati nella console da programmi lanciati con Exec o Shell
Nei casi in cui l'applicativo Gambas riceve dati nella propria console da programmi che nel suo codice sono stati lanciati con Exec o Shell. Tali dati potranno essere intercettati anche se l'applicativo Gambas è avviato a livello di IDE come semplice progetto.
Nell'esempio che segue, i dati intercettati nella console, proveniente da un programma esterno lanciato con Exec e di cui viene gestito il processo mediante una variabile di tipo Process, vengono poi trasferiti direttamente in una TextArea posta sul Form dell'applicativo Gambas:
Private pr As Process Public Sub Form_Open() pr = Exec ["/percorso/del/programma/di/cui/si/riceveranno/i/dati/in/console"] For Input As "prova" ' Può essere usato anche il comando "Shell" End Public Sub prova_Read() TextArea1.Text &= pr.ReadLine() & "\n" End