Differenze tra le versioni di "Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input"
Riga 1: | Riga 1: | ||
− | E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo standard Output e lo standard Input, mediante "''Process''". | + | E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo "''standard Output'' " e lo "''standard Input'' " <SUP>[[[#Note|Nota 1]]]</sup>, mediante "''Process''". |
Facciamo un esempio in cui abbiamo un programma principale ed uno secondario. | Facciamo un esempio in cui abbiamo un programma principale ed uno secondario. | ||
Riga 81: | Riga 81: | ||
---- | ---- | ||
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. | 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. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | =Note= | ||
+ | [1] Quando un programma viene eseguito, il sistema operativo genera tre file chiamati rispettivamente: "''standard input''", "''standard output''" e "''standard error''". | ||
+ | <BR>Di norma lo "''standard input''" è riferito alla tastiera, mentre lo "''standard output''" e lo "''standard error''" sono riferiti allo schermo. Ogni rapporto e riferimento ai file avvengono attraverso un proprio Puntatore al file, chiamato "''descrittore di file''". I ''descrittori'' di questi tre file sono rappresentati con dei numeri, in particolare: 0, 1 e 2. | ||
+ | <BR>0 = "''standard input'' ": il programma legge i dati scritti/inviati dalla periferica. | ||
+ | <BR>1 = "''standard output'' ": il programma scrive/invia dati alla periferica, la quale legge i dati inviati dal programma. | ||
+ | <BR>2 = "''standard error'' ": il programma scrive/invia messaggi d'errore al video. |
Versione delle 17:06, 19 set 2017
E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo "standard Output " e lo "standard Input " [Nota 1], 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/del/programma/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.
Note
[1] Quando un programma viene eseguito, il sistema operativo genera tre file chiamati rispettivamente: "standard input", "standard output" e "standard error".
Di norma lo "standard input" è riferito alla tastiera, mentre lo "standard output" e lo "standard error" sono riferiti allo schermo. Ogni rapporto e riferimento ai file avvengono attraverso un proprio Puntatore al file, chiamato "descrittore di file". I descrittori di questi tre file sono rappresentati con dei numeri, in particolare: 0, 1 e 2.
0 = "standard input ": il programma legge i dati scritti/inviati dalla periferica.
1 = "standard output ": il programma scrive/invia dati alla periferica, la quale legge i dati inviati dal programma.
2 = "standard error ": il programma scrive/invia messaggi d'errore al video.