Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > kbhit под SOLARIS


Автор: John_Doe 28.7.2004, 17:53
Hi all,

Старый вопрос, но, видимо, я совсем новичок под юнихом.
В общем, нашёл в фак-ах такое:

Код

static struct termios stored_settings;

void set_keypress(void)
{
 struct termios new_settings;
 tcgetattr(0,&stored_settings);
 new_settings = stored_settings;
 /* Disable canonical mode, and set buffer size to 1 byte */
 new_settings.c_lflag &= (~ICANON);
 new_settings.c_cc[VTIME] = 0;
 new_settings.c_cc[VMIN] = 1;
 tcsetattr(0,TCSANOW,&new_settings);
}

void reset_keypress(void)
{
 tcsetattr(0,TCSANOW,&stored_settings);
}


Но что дальше с этим делать?.. Как это poll или signal?

Заранее благодарен за помощь!

Автор: John_Doe 3.8.2004, 10:26
Сам себе и ответил bored.gif
Соответственно, после вызова set_keypress(), делается так:

#include <poll.h>
bool kbhit()
{
pollfd_t fd = {0, POLLNORM};
return poll(&fd, 1, 0) != 0;
}

Другой вопрос, что не возможно отличить нажатие клавиши курсора от нажатия ESCAPE и ещё 2х клавиш подряд, т.к. после курсора сыпятся 3 скан-кода, первый из которых равен 0х1В и совпадает с кодом эскейпа. sad.gif Проверка с kbhit() после чтения первого скан-кода не помогает.
Если у кого будут идеи и предложения, буду рад...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)