Differenze tra le versioni di "Intercettare dati inviati al programma dal sistema o da altri programmi utilizzati"

Da Gambas-it.org - Wikipedia.
(Creata pagina con '==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 applicazi...')
 
 
(18 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.
 
 
 
 
 
<BR>L'applicativo Gambas avrà, dunque, codice di questo tenore:
 
'''Private''' pr As Process
 
 
 
'''Public''' Sub Form_Open()
 
 
  pr = Shell "cat < /proc/<FONT color=#B22222>num_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()
 
 
  Dim s As String
 
 
    s = InputBox("Immetti il numero di processo (PID) di questo programma Gambas:")
 
 
    pr = Shell "cat < /proc" &/ s &/ "fd/1" For Read As "pr"
 
 
 
'''End'''
 
 
 
'''Public''' Sub pr_Read()
 
 
  Dim s As String
 
 
  Line Input #pr, s
 
 
    TextArea1.Text = s
 
 
'''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''==
 
Nei casi in cui l'applicativo Gambas riceve dati nella propria console da programmi che nel suo codice sono stati lanciati con ''Exec'', 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"
 
 
'''End'''
 
 
 
'''Public''' Sub prova_Read()
 
 
  TextArea1.Text &= pr.ReadLine() & "\n"
 
 
'''End'''
 
 
 
 
 
 
 
=Note=
 
[1] <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.
 

Versione attuale delle 15:49, 23 mar 2021