Intercettare i dati inviati allo standard output da un programma C

Da Gambas-it.org - Wikipedia.
Versione del 18 giu 2014 alle 03:44 di Vuott (Discussione | contributi) (Creata pagina con 'Mostreremo due casi, nei quali un applicativo Gambas lancia mediante la funzione ''Shell'' un programma scritto in linguaggio C, e ne intercetta i dati che quest'ultimo invia ...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Mostreremo due casi, nei quali un applicativo Gambas lancia mediante la funzione Shell un programma scritto in linguaggio C, e ne intercetta i dati che quest'ultimo invia allo standard output (stdout).


Programma C che invia immediatamente dati all'output non appena avviato

In questo caso il programma Gambas avvia il programma scritto in C, il quale invia immediatamente i dati allo standard output.

Il programma scritto in Gambas in tale circostanza intercetterà i dati, trasmessi dal programma in C allo standard output, mediante la parola "To" assegnandoli ad una variabile stringa:

Shell "/percorso/del/programma_C" To variabile_stringa

Esempio pratico

Facciamo, dunque, un semplice esempio.

Il codice del programma, scritto in C, sarà il seguente:

#include <stdio.h> 


void main(int argc, char **argv) {          /* Riceve il PID del programma Gambas */

 printf("%s", argv[1]);
 
}


Il codice dell'applicativo Gambas sarà il seguente:

Public Sub Main()

 Dim i As Integer                                            
 Dim s As String

  Do
    Wait 0.02
    Inc i
    If i = 50 Then Shell "/percorso/del/programma_C " & Application.Handle To s
  Loop Until i = 52

  Print "Il PID dell'applicativo Gambas letto dalla variabile 's' = "; s

End


Programma C che invia dati allo standard output durante il suo funzionamento

In quest'altro caso il programma Gambas avvia il programma scritto in C, il quale invierà i dati allo standard output successivamente durante il suo funzionamento.

Il programma scritto in Gambas in tale circostanza intercetterà i dati, trasmessi dal programma in C allo standard output, ponendo in osservazione il processo aperto del programma C mediante le parole "For Read". Lo standard output del programma C sarà, quindi, intercettato da un'apposita subroutine di Gambas, che viene sollevata quando c'è qualcosa da leggere nello standard output. I dati saranno raccolti da una specifica variabile appositamente dichiarata per gestire il processo avviato del programma scritto in C.

Esempio pratico

Facciamo, dunque, un semplice esempio.

Il codice del programma, scritto in C, sarà il seguente:

#include <stdio.h>
  

void main() {

int i;

 for (i = 1; i <= 5000; i++) {

   if ((i % 100) == 0)
     printf("%d\n", i);

 } 

}


Il codice dell'applicativo Gambas sarà il seguente:

Private pr As Process


Public Sub Main()

  pr = Shell "/percorso/del/programma_C" For Read As "processo"
 
End


Public Sub processo_Read()
 
 Dim s As String

' Legge i dati dalla variabile, con la quale si gestisce il processo:
  Line Input #pr, s
 
  Print "Dato intercettato: "; s
  
End