Differenze tra le versioni di "Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input"
(Nuova pagina: E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo standard Output e lo standard Input, mediante "''Process''". Facciamo...) |
|||
Riga 10: | Riga 10: | ||
'''Public''' Sub Button1_Click() | '''Public''' Sub Button1_Click() | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Avviamo il programma secondario e lo gestiamo con "''Process''":''</font> |
scnd = Exec ["percorso/secondo.gambas"] For Read Write As "secondo" | scnd = Exec ["percorso/secondo.gambas"] For Read Write As "secondo" | ||
Riga 16: | Riga 16: | ||
− | '''Public''' Sub | + | '''Public''' Sub Button2_Click() |
− | <FONT Color= | + | <FONT Color=gray>' ''Inviamo al programma secondario il valore numerico:''</font> |
Write #scnd, 99 As Byte | Write #scnd, 99 As Byte | ||
Riga 24: | Riga 24: | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Se potrà essere letto almeno un byte dal processo "secondo", verrà sollevata questa subroutine:''</font> |
'''Public''' Sub secondo_Read() | '''Public''' Sub secondo_Read() | ||
Dim by As Byte | Dim by As Byte | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Legge i dati scritti dal programma secondo:''</font> |
Read #scnd, by | Read #scnd, by | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Qui mostriamo in console il dato intercettato:''</font> |
− | TextLabel1.Text = "Dato intercettato modificato = " | + | TextLabel1.Text = "Dato intercettato modificato = " & CStr(by) |
'''End''' | '''End''' | ||
Riga 46: | Riga 46: | ||
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Apre lo standard Input per la lettura...''</font> |
flIn = Open "/dev/stdin" For Read Watch | flIn = Open "/dev/stdin" For Read Watch | ||
Riga 57: | Riga 57: | ||
Dim a, b As Byte | Dim a, b As Byte | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Legge il dato passato dallo standard Input:''</font> |
Read #flIn, b | Read #flIn, b | ||
flIn.Close | flIn.Close | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Mostra nella propria TextLabel il dato intercettato:''</font> |
TextLabel1.Text = CStr(b) | TextLabel1.Text = CStr(b) | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Effettua la modifica del dato intercettato:''</font> |
a = b + 1 | a = b + 1 | ||
− | <FONT Color= | + | <FONT Color=gray>' ''Apre lo standard Output per la Scrittura...''</font> |
out = Open "/dev/stdout" For Write | out = Open "/dev/stdout" For Write | ||
− | <FONT Color= | + | <FONT Color=gray>' ''...e vi scrive il valore della variabile "a":''</font> |
Write #out, a As Byte | Write #out, a As Byte | ||
Versione delle 18:06, 27 mag 2017
E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo standard Output e lo standard Input, mediante "Process".
Facciamo un esempio in cui abbiamo un programma principale ed uno secondario.
Avremo il programma principale che avvia il programma secondario (che chiameremo: secondo.gambas) e lo gestisce con Process. Il programma principale invia mediante Process un dato numerico al programma secondario. Il programma secondario intercetta quindi con l'evento _Read() il dato passato dallo standard Input, lo mostra in una TextLabel e lo modifica sommandolo ad un altro valore. Dopo ciò invierà il dato come modificato al programma principale mediante lo standard Output, il quale lo intercetterà mediante l'evento _Read() di Process.
Private scnd As Process Public Sub Button1_Click() ' Avviamo il programma secondario e lo gestiamo con "Process": scnd = Exec ["percorso/secondo.gambas"] For Read Write As "secondo" End Public Sub Button2_Click() ' Inviamo al programma secondario il valore numerico: Write #scnd, 99 As Byte End ' Se potrà essere letto almeno un byte dal processo "secondo", verrà sollevata questa subroutine: Public Sub secondo_Read() Dim by As Byte ' Legge i dati scritti dal programma secondo: Read #scnd, by ' Qui mostriamo in console il dato intercettato: TextLabel1.Text = "Dato intercettato modificato = " & CStr(by) End
Il programma secondario (chiamato: secondo.gambas) che intercetta attraverso lo standard Input il dato inviatogli, e lo re-invia - come modificato - al programma principale attraverso lo standard output, sarà questo:
Private flIn As File Public Sub Form_Open() ' Apre lo standard Input per la lettura... flIn = Open "/dev/stdin" For Read Watch End Public Sub File_Read() Dim out As File Dim a, b As Byte ' Legge il dato passato dallo standard Input: Read #flIn, b flIn.Close ' Mostra nella propria TextLabel il dato intercettato: TextLabel1.Text = CStr(b) ' Effettua la modifica del dato intercettato: a = b + 1 ' Apre lo standard Output per la Scrittura... out = Open "/dev/stdout" For Write ' ...e vi scrive il valore della variabile "a": Write #out, a As Byte out.Close End
Al termine dell'intera procedura avremo nella TextLabel del programma secondario scritto il dato: 99, mentre nella TextLabel del programma principale scritto il dato come modificato: 100.