|
|
(12 versioni intermedie di uno stesso utente non sono mostrate) |
Riga 1: |
Riga 1: |
− | ==Casi in cui l'applicativo riceve dati non previsti e non richiesti==
| + | #REDIRECT [[Intercettare_i_dati_inviati_allo_standard_output_da_un_programma_C]] |
− | 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 .
| |
− | <BR>Il programma Gambas può intercettare tali dati in tempo reale |[[#Note|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.
| |
− | | |
− | <SPAN style="text-decoration:underline">Il programma che riceve i dati dal sistema è capace di intercettarli dalla propria console solo se è un eseguibile</span>. 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/<FONT color=#B22222>numero_del_processo</font>/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()
| |
− |
| |
− | <FONT color=gray>' ''Per l'esperimento inserire questo file-device o comunque altro file "protetto":</font>
| |
− | 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" <FONT color=gray>' ''Può essere usato anche il comando "Shell"''</font>
| |
− |
| |
− | '''End'''
| |
− |
| |
− |
| |
− | '''Public''' Sub prova_Read()
| |
− |
| |
− | TextArea1.Text &= pr.ReadLine() & "\n"
| |
− |
| |
− | '''End'''
| |