Implementazione semplice (e sporca?) di getch() su UN*X

getch() è una funzione che restituisce un carattere ricevuto in input: è abbastanza comoda, ma non troppo portabile. Ho trovato questa reimplementazione in giro su Internet, e funziona. Con un po’ di accortezza, e usando una semplice direttiva di pre-processore, si può anche evitare di fare dei controlli di conformità nel momento in cui servirebbe usarla. Questo pezzetto di codice è tanto più importante se si pensa l’unica alternativa praticabile sarebbe quella di scrivere un’applicazione usando la libreria curses, che la prevede – ma solo all’interno di un programma che ne faccia uso interamente.

#include <stdio .h>
#include <unistd .h>
#include <termios .h>

int unix_getch()
{
    struct termios oldt,newt;
    int ch;

    tcgetattr( STDIN_FILENO, &oldt );

    newt = oldt;
    newt.c_lflag &= ~( ICANON | ECHO );

    tcsetattr( STDIN_FILENO, TCSANOW, &newt );

    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt );

    return ch;
}

[da qui]

Una Risposta a “Implementazione semplice (e sporca?) di getch() su UN*X”

  1. furester Dice:

    Interessante! anchio in questi giorni mi son trovato a “giocare” con questa funziona, ho scritto proprio ora un post su getch() in python

I commenti sono chiusi.