[Tech] Input da tastiera

Franco Bagnoli franco.bagnoli@unifi.it
Mar 18 Mar 2003 09:42:26 CET


On Mon, 17 Mar 2003, Stefano wrote:

> Sto scrivendo un programmino in C e mi servirebbe leggere i tasti
> premuti senza dover aspettare di premere l'invio. Utilizzando
> getc(stdin) devo aspettare di aver premuto l'invio.
> Suggerimenti ?

usa ncurses.

Ma dipende anche da quello che vuoi fare. Io per esempio ho sviluppato una 
utility (che non ho mai completato) per fare input di dati nei programmi 
scientifici che tipicamente hanno una struttura tipo 

main() {
	initialize();
	while(1) loop();
        end();
}

e a volte ho bisogno di cambiare i dati mentre sta girando il loop. Invece 
di controllare ad ogni passo del loop se c'è un tasto premuto, istallo un 
handler di segnali (man signal) 

#include <signal.h>

void stoph(int signal); /* gestisce l'input */
int stop=0;

main() {
        signal(SIGUSR1,stoph);  

        initialize();
        while (1) {
          loop();
          if (stop) {
            input();
            stop=0;
          }
        }
        end()
}

void stoph(int a)
{
        stop=1;
}

puoi comunicare un segnal al processo usando kill o anche con la
pressione di un tasto usando stty. Usare i segnali permette anche di
gestire un programma da parte di un altro programma, forse addirittura
via rete (?) 

Dovrei mettere queste informazioni su 

http://www.complex.unifi.it/WebComplex/bin/view/Software/IDEPerProgrammiSimulazione


-- 
Franco Bagnoli (franchino) <franco.bagnoli@unifi.it> (bagnoli@dma.unifi.it)
virtual location: Dipartimento di Energetica "S. Stecco"
real location: Dip. Matematica Applicata "G. Sansone", Universita' Firenze,
Via S. Marta, 3 I-50139 Firenze, Italy. Tel. +39 0554796422, fax: +39 055471787
GPG Key fingerprint = 169D 9EA5 8FD3 7EDA E43A  9830 255F BCEC 0D63 3728




Maggiori informazioni sulla lista flug-tech