¿Cómo implementar la función getch () de C en Linux?

En TurboC ++, puedo usar la función getch() de conio.h . Pero en Linux, gcc no proporciona conio.h . ¿Cómo puedo obtener la funcionalidad de getch() ?

    Pruebe este archivo conio.h :

     #include  #include  #include  /* reads from keypress, doesn't echo */ int getch(void) { struct termios oldattr, newattr; int ch; tcgetattr( STDIN_FILENO, &oldattr ); newattr = oldattr; newattr.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); ch = getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); return ch; } /* reads from keypress, echoes */ int getche(void) { struct termios oldattr, newattr; int ch; tcgetattr( STDIN_FILENO, &oldattr ); newattr = oldattr; newattr.c_lflag &= ~( ICANON ); tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); ch = getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); return ch; } 

    También puede usar la biblioteca ncurses en gcc para algunas funciones similares a conio.h .

    Si hacer eco en la pantalla no es un problema, puede intentar usar getchar() desde stdio.h .

    getch() parece estar incluido en la biblioteca de curses .

    En Unix, getch() es parte de la biblioteca ncurses. Pero escribí una solución para esta pregunta que le permite usar una funcionalidad tipo getch sin el rest del equipaje de maldiciones.

    De acuerdo con este código de solución, debe usar manualmente el código fuente abierto para las funciones getch () y getche (), tal como se describe, el código es el siguiente.

     #include  #include  static struct termios old, new; /* Initialize new terminal i/o settings */ void initTermios(int echo) { tcgetattr(0, &old); /* grab old terminal i/o settings */ new = old; /* make new settings same as old settings */ new.c_lflag &= ~ICANON; /* disable buffered i/o */ new.c_lflag &= echo ? ECHO : ~ECHO; /* set echo mode */ tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */ } /* Restore old terminal i/o settings */ void resetTermios(void) { tcsetattr(0, TCSANOW, &old); } /* Read 1 character - echo defines echo mode */ char getch_(int echo) { char ch; initTermios(echo); ch = getchar(); resetTermios(); return ch; } /* Read 1 character without echo */ char getch(void) { return getch_(0); } /* Read 1 character with echo */ char getche(void) { return getch_(1); } 

    Simplemente póngalo antes de su método principal de código

    conio.h solo está en Dos,

    para Linux, use

     sudo apt-get install libncurses-dev 

    & entonces

     -lncurses 

    // En IDE, tiene que vincularlo: por ejemplo: bloques de código, Configuración -> Comstackdor -> Configuración del enlazador, y agregar ‘ncurses’

    getch() está en libcurses . el uso de curses es un poco más complejo porque tiene vínculos profundos con el terminal subyacente y debe inicializarse. un ejemplo de trabajo para curses getch() con la inicialización de libcurses está en getchar () devuelve el mismo valor (27) para las teclas de flecha arriba y abajo

    Puede usar getch() equivalente de libcaca :

     __extern int caca_conio_getch (void) 

    Si, por algún motivo, no puedes usar maldiciones, prueba esto:

     # include  # include  # include  # include  # include  /* get a single char from stdin */ int getch(void) { struct termios oldattr, newattr; int ch; tcgetattr(0, &oldattr); newattr=oldattr; newattr.c_lflag &= ~( ICANON | ECHO ); tcsetattr( 0, TCSANOW, &newattr); ch=getchar(); tcsetattr(0, TCSANOW, &oldattr); return(ch); }