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.
Como se dijo anteriormente getch()
está en la biblioteca ncurses
. ncurses tiene que inicializarse , ver es decir, getchar () devuelve el mismo valor (27) para las teclas de flecha hacia arriba y hacia abajo para este
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