ron_lima
(usa Slackware)
Enviado em 05/03/2009 - 17:23h
Sim, é possível. No entanto, será necessário realizar chamadas de sistema para realizar a leitura de informações do teclado, e isso é amplamente dependente de plataforma. Tenha em mente que a biblioteca STDC - getchar é uma função que pertence ao padrão - isola seu programa da dependência da plataforma.
Uma forma de fazer isso é escrever a getchar como segue:
#include "sys/stat.h"
#include <fcntl.h>
int my_getchar (void) {
int fd = open ("/dev/tty", O_RDONLY);
if (fd > 0) {
int ch;
read (fd, &ch, sizeof (ch));
close (fd);
return ch;
}
return -1;
}
Essa versão é essencialmente ruim. Mas vamos aos princípios. Normalmente, /dev/tty é o terminal corrente. As funções open, read e close não fazem parte da biblioteca C e são chamadas de sistema. Em outras palavras, fazem parte da API do sistema operacional. Neste caso, como estamos tratando de um sistema "unix like" como o linux, as chamadas para leitura dos dados do teclado são essas.
No caso do sistema Windows, você deverá utilizar as funções da API Win32 ou Win64 (que são basicamente a mesma coisa, mas com tamanhos binários distintos) que se referem ao console.
Note, não há como escapar de ir ao sistema operacional e chamar algum serviço dele neste caso em particular. Afinal, o controle de entradas e saídas de dados está nas mãos do sistema operacional. Essa função que demonstra o princípio aqui é totalmente não-portável, pois as chamadas de sistema são específicas para o linux. Portanto, se você precisar portar essa função para outra arquitetura de sistema operacional, como Open Solaris, Tru64 ou HPUX, os princípios aqui apresentados podem mudar completamente.
Espero ter ajudado.