Discussion:
Leer de teclado
(demasiado antiguo para responder)
m***@gmail.com
2007-01-26 21:59:14 UTC
Permalink
Necesito leer de teclado sin tener que pulsar enter. Pero necesito que
sea con librerías ANSI C.
Ya vi que propusieron getch() pero está en conio.h y esta es de C++.
Agradecería vuestra ayuda.
void
2007-01-26 22:22:18 UTC
Permalink
Post by m***@gmail.com
Necesito leer de teclado sin tener que pulsar enter. Pero necesito que
sea con librerías ANSI C.
Ya vi que propusieron getch() pero está en conio.h y esta es de C++.
Agradecería vuestra ayuda.
Creo que eso depende completamente del S.O. y aun mas del tipo de
terminal del que quieras leer (si es de un terminal que quieres leer la
entrada).
Si tienes un sistema Unix-like mira por el lado de ioctl, termio y
termcaps, ahí encontraras todo lo que necesitas.
En todo caso tu pregunta tendrá mas sentido en un forum/news-group
especializado en tu sistema operativo.
--
Ely
Zephryn Xirdal
2007-01-26 22:39:05 UTC
Permalink
Que yo sepa, ANSI no hay niguna.

Borland tenía el kbhit(), pero no sé si también está en otros
compiladores.
Post by m***@gmail.com
Necesito leer de teclado sin tener que pulsar enter. Pero necesito que
sea con librerías ANSI C.
Ya vi que propusieron getch() pero está en conio.h y esta es de C++.
Agradecería vuestra ayuda.
--
Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
Pascal Bourguignon
2007-01-27 21:50:32 UTC
Permalink
Post by m***@gmail.com
Necesito leer de teclado sin tener que pulsar enter. Pero necesito que
sea con librerías ANSI C.
Ya vi que propusieron getch() pero está en conio.h y esta es de C++.
Agradecería vuestra ayuda.
En efecto, es un tema especifico al sistema que usas. Mejor ir a
preguntar en el grupo especifico a tu sistema.

En unix, se podria hacer algo como (pseudo code, no comprobado):

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

void set_raw(int fd){
struct termios raw;
check_errors(cfmakeraw(&raw));
check_errors(tsetattr(fd,TCSANOW,&raw));
}

int main(void){
int res;
char byte;
set_raw(0);
res=read(0,&byte,1);
if(res==1){
printf("Got one byte: %c (%d)\n",byte,byte);
}
return(0);
}
--
__Pascal Bourguignon__ http://www.informatimago.com/

Nobody can fix the economy. Nobody can be trusted with their finger
on the button. Nobody's perfect. VOTE FOR NOBODY.
void
2007-01-28 13:40:25 UTC
Permalink
Post by Pascal Bourguignon
Post by m***@gmail.com
Necesito leer de teclado sin tener que pulsar enter. Pero necesito que
sea con librerías ANSI C.
Ya vi que propusieron getch() pero está en conio.h y esta es de C++.
Agradecería vuestra ayuda.
En efecto, es un tema especifico al sistema que usas. Mejor ir a
preguntar en el grupo especifico a tu sistema.
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
void set_raw(int fd){
struct termios raw;
check_errors(cfmakeraw(&raw));
check_errors(tsetattr(fd,TCSANOW,&raw));
}
Buscando en viejos proyecto encontré una función similar a esta que use
hace tiempo, no he comprobado si funciona, pero supongo que lo hace
bien, no esta de mas que las tengas las dos ;)

void set_raw(int fd)
{
struct termios linep;

if (tcgetattr(0, &linep) == -1)
; /* Exit con impresion de error*/
linep.c_lflag &= ~(ECHO | ICANON);
linep.c_cc[VTIME] = 0;
linep.c_cc[VMIN] = 1;
tcsetattr(fd, TCSANOW, &linep);
}
Post by Pascal Bourguignon
int main(void){
int res;
char byte;
set_raw(0);
res=read(0,&byte,1);
if(res==1){
printf("Got one byte: %c (%d)\n",byte,byte);
}
return(0);
}
Antoine Leca
2007-03-23 16:54:29 UTC
Permalink
X-No-Archive: Yes
^^^^^^^

¿Invasore*s* del otro lado de los Pirineos?

:-)

Antoine

J.A. Gutierrez
2007-01-30 09:17:53 UTC
Permalink
Pascal Bourguignon <***@informatimago.com> wrote:
: ***@gmail.com writes:

:> Necesito leer de teclado sin tener que pulsar enter. Pero necesito que
:> sea con librerías ANSI C.
:> Ya vi que propusieron getch() pero está en conio.h y esta es de C++.
:> Agradecería vuestra ayuda.

: En efecto, es un tema especifico al sistema que usas. Mejor ir a
: preguntar en el grupo especifico a tu sistema.

: En unix, se podria hacer algo como (pseudo code, no comprobado):

<http://giga.cps.unizar.es/~spd/src/test/rkey_curses.c>
<http://giga.cps.unizar.es/~spd/src/test/rkey_ioctl.c>
--
PGP and other useless info at \
http://webdiis.unizar.es/~spd/ \
finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
Loading...