Ler STDIN sem aguardar enter [RESOLVIDO]

1. Ler STDIN sem aguardar enter [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 07/03/2013 - 14:52h

Boa tarde.

Caros,

Estou necessitando desenvolver uma camada que comunica com uma porta serial no Linux, onde leia alguns comandos.
Até aí não tem mistério, porém quando uma mensagem é enviada, junto a
ela não é enviado um "\n", e nunca será.

Alguém sabe ler sem aguardar o Enter?

Eu tentei isso:
int main ( void )
{
char p_char[48];
memset( p_char, 0, sizeof(p_char) );
fcntl( STDIN_FILENO, F_SETFL, FNDELAY );
read( STDIN_FILENO, p_char, sizeof(p_char) );
}

Claro, não esta funcionando.


  


2. MELHOR RESPOSTA

Raniere Machado
raniere.ee

(usa Ubuntu)

Enviado em 15/03/2013 - 16:20h

Ao abrir a porta serial, você precisa configurar ela em modo RAW (não canônico).

Bsaicamente assim:


/* Define essa estrutura */
struct termios options;

/* Busca as configurações atuais do seu teclado */
tcgetattr( fd, &options );

/* Configura como modo RAW */
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

/* Seta como você quer que se comporte */
tcsetattr( fd, TCSANOW, &options );


Basicamente é isso. Seu programa não irá esperar pelo BARRAN_N.

No entanto, uma boa prática é você fazer o backup da estrutura de configuração do seu teclado. Para que depois possa restaurar os valores.

Aqui tem um bom tutorial de como configurar uma serial.

http://www.easysw.com/~mike/serial/serial.html


Raniere

3. Re: Ler STDIN sem aguardar enter [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 15/03/2013 - 16:30h

Vlw!

Sim, essa mesma.

Eu li o man do termios e consegui.

É bem isso mesmo.

Coloquei uma rotina com atexit pra restaurar o terminal na saída :)


Abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts