referencia definir c linux

definir - ¿Qué es Equivalente a getch() & getche() en Linux?



getch linux (7)

No puedo encontrar el archivo de encabezado equivalente para conio.h en Linux.

¿Hay alguna opción para la función getch() & getche() en Linux?

Quiero hacer un menú base de caja de conmutadores donde el usuario dará su opción simplemente presionando una tecla y el proceso debe avanzar. No quiero permitir que el usuario presione ENTER después de presionar su elección.



El reemplazo de getch() es getchar() declarado en stdio.h . getchar() está disponible en Windows y Linux.


Hay una función getch () en la biblioteca ncurses. Puede obtenerlo instalando el paquete ncurses-dev.


Puede usar la biblioteca curses.h en Linux como se menciona en la otra respuesta.

Puedes instalarlo en Ubuntu por:

sudo apt-get update

sudo apt-get install ncurses-dev

Tomé la parte de instalación desde here .


Sugiero que use curses.h o ncurses.h estas implementaciones de rutinas de administración de teclado, incluida getch (). Usted tiene varias opciones para cambiar el comportamiento de getch (es decir, espere a que se presione la tecla o no).


#include <termios.h> #include <stdio.h> 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 */ if (echo) { new.c_lflag |= ECHO; /* set echo mode */ } else { new.c_lflag &= ~ECHO; /* set no 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); } /* Let''s test it out */ int main(void) { char c; printf("(getche example) please type a letter: "); c = getche(); printf("/nYou typed: %c/n", c); printf("(getch example) please type a letter..."); c = getch(); printf("/nYou typed: %c/n", c); return 0; }

Solo copia estas funciones y úsalas. He encontrado este fragmento en google mucho antes y lo he guardado. ¡Finalmente lo abrí después de mucho tiempo para ti! ¡Espero que ayude! Gracias


char getch(){ /*#include <unistd.h> //_getch*/ /*#include <termios.h> //_getch*/ char buf=0; struct termios old={0}; fflush(stdout); if(tcgetattr(0, &old)<0) perror("tcsetattr()"); old.c_lflag&=~ICANON; old.c_lflag&=~ECHO; old.c_cc[VMIN]=1; old.c_cc[VTIME]=0; if(tcsetattr(0, TCSANOW, &old)<0) perror("tcsetattr ICANON"); if(read(0,&buf,1)<0) perror("read()"); old.c_lflag|=ICANON; old.c_lflag|=ECHO; if(tcsetattr(0, TCSADRAIN, &old)<0) perror ("tcsetattr ~ICANON"); printf("%c/n",buf); return buf; }

copia esta función y úsala , no olvides incluir

remove the last printf if you dont want the char to be displayed