|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
nonblocking STDIN
ciao,
sto cercando di leggere un carattere dallo STDIN in C. il carattere che leggo deve essere accettato senza dare invio, e il programma deve proseguire se non c'è alcun input. qui ho trovato una soluzione, ma ho letto spulciando su internet che forse mettere STDIN nonblocking non è una buona soluzione: perchè? alternative ? tnx
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
così può andare?
tenete presente che nel frattempo devo leggere e scrivere su una seriale, e la pressione dei tasti NON DEVE alterare ciò che leggo/scrivo sulla RS232 Codice:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <termios.h>
int main(int argc, char *argv[])
{
int ch,i;
struct termios options;
tcgetattr(STDIN_FILENO,&options);
options.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO,TCSANOW,&options);
int flags = fcntl(STDIN_FILENO, F_GETFL);
if (flags == -1) return -1; // error
fcntl(STDIN_FILENO, F_SETFL, (flags | O_NONBLOCK) & ~ICANON);
for (i=0;i<500;i++) {
ch = fgetc(stdin);
if (ch!=-1) printf("%c * %02x\n",ch,ch);
usleep(100);
}
tcgetattr(STDIN_FILENO,&options);
options.c_lflag |= (ICANON | ECHO);
tcsetattr(STDIN_FILENO,TCSANOW,&options);
return 0;
}
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
ho risolto più elegantemente passando a ncurses (che non avevo mai usato prima!)
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:33.


















