Differenze tra le versioni di "Ricevere un 'segnale' da un programma C"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Un applicativo Gambas può ricevere un "''segnale''" da un programma C, generato al verificarsi di un evento mediante le specifiche funzioni previste dal linguaggio C. L'inter...')
 
Riga 32: Riga 32:
 
     kill(i, SIGUSR1);
 
     kill(i, SIGUSR1);
 
   }
 
   }
 
}
 
 
 
Il codice dell'apposita libreria condivisa .so, da noi realizzata per ricevere il segnale dal programma C, che chiameremo ad esempio "''libadhoc.c''" e che porremo nella cartella "''Dati''" sarà la seguente
 
#include <stdio.h>
 
#include <signal.h>
 
 
 
void vai(int);
 
 
int segnale() {
 
 
<FONT color=blue>/* Se il codice riceve il segnale 'SIGURS1', allora invoca la funzione 'vai' */</font>
 
  signal(SIGUSR1, vai);
 
 
  return (0);
 
 
}
 
 
 
void vai(int i) {
 
 
    printf("--> La libreria 'libadhoc.so' ha ricevuto segnale da 'programma.c'\n");
 
 
   
 
   
 
  }
 
  }

Versione delle 03:34, 18 giu 2014

Un applicativo Gambas può ricevere un "segnale" da un programma C, generato al verificarsi di un evento mediante le specifiche funzioni previste dal linguaggio C. L'intercettazione da parte di Gambas del segnale, inviato dal programma C, mediante la funzione "signal()" può avvenire solo utilizzando un'apposita libreria condivisa .so, che dovrà essere scritta da noi.


Esempio pratico

Nell'esempio che segue, l'applicativo Gambas avvia un programma C passandogli anche il numero identificativo dl suo L'applicativo Gambas provvede, altrsì, a gestire il processo del programma C mediante apposita variabile di tipo Process, nonché ponendolo in osservazione con le parole For Read.

Il programma C invia innanzitutto al proprio stdout un messaggio contenente fra l'altro l'Id ricevuto del processo dell'applicativo Gambas. Successivamente esso invia ogni dieci cicli all'interno di un'iterazione For un segnale all'applicativo Gambas, individuato in base all'Id del processo Gambas ricevuto.

L'applicativo Gambas riceverà tramite la propria libreria condivisa .so il segnale inviato dal programma C, ed intercetterà quanto scritto dal programma C nel proprio stdout.


Il programma C in questo esempio sarà il seguente:

#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>


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

  printf(" \"PID applicativo Gambas = %s\"\n", argv[1]);

// Converte il valore stringa di caratteri in Valore numerico intero:
  int i = atoi(argv[1]);

  int n;

  for (n==1; n<=51; n++) {
/* kill() - invia un segnale ad un processo individuato dal suo PID
   contenuto nella variabile "i": */
    if ((n%10)==0) 
    kill(i, SIGUSR1);
  }

}