Добрый день,
необходимо получать один символ с клавитуры, в течении, допустим, 5
секунд, если не получен - ждать следующие 5 секунд и так далее.
Один раз всё прекрасно работает:
static struct termios tosave;
is_char()
...
struct termios towork;
tcgetattr(0,&tosave);
memcpy(&towork,&tosave,sizeof(struct termios));
towork.c_cc[VTIME]=50;
towork.c_cc[VMIN]=0;
towork.c_lflag &= ~( ICANON | ECHO );
tcsetattr(0,TCSANOW,&towork);
result=getchar();
tcsetattr(0,TCSANOW,&tosave);
return result;
}
Однако в цикле, например,
for (i=0;i<20;i++){
printf ("%d ",i);
ch=is_char();
if (is_char != -1){
printf("Interupted\n");
return 1;
}
}
нормально ждет первые 5 секунд (и выходит при нажатии), а потом
сразу печатает 1...19.
Как я понял, с буфером stdin это никак не связано, подозреваю,
что дело в таймере; но ведь после считывания символа структура
termios полностью восттанавливается! Поиски подходящего примера в
google ничего не дали :(
Ответ на:
комментарий
от Murr
Ответ на:
комментарий
от octy
Ответ на:
комментарий
от Murr
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Консольная программа завершается при вызове getchar() и нажатии Enter/стрелок (2013)
- Форум Serial port programming (2008)
- Форум не работает tputs (2019)
- Форум Буферизованный ввод с клавиатуры (2010)
- Форум Проблема со считыванием кодов нажатых клавиш (2019)
- Форум Как узнать сколько байт пришло на /dev/ttyS0 ? (2003)
- Форум программно настроить последовательный порт (2010)
- Форум pty и каноничный режим (2011)
- Форум [ttyUSB0] вызов read() (2010)
- Форум Com-port настройка (2023)