VV>>> if(kbdhit()) getch(); AM>> $ man kbhit AM>> No manual entry for kbhit AM>> $ man kbdhit AM>> No manual entry for kbdhit AM>> $ VV> Очевидно что проблема легко решается в случае каждой отдельной системы, VV> хотя общего платформонезависимого решения может и не быть. Для неблокирующий ввод с клавы под Линуксом я сотворил такой код: #include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <fcntl.h>
#include <sys/ioctl.h>
static int fdkbd=1; static struct termios kb_saved_attributes;
/*возврат в исходное состояние при завершении программы*/ void kb_reset_input_mode (void) { tcsetattr (fdkbd, TCSANOW, &kb_saved_attributes); }
/*инициализация клавы*/ void KBD_SIM (void) { static struct termios tattr; /* Save the terminal attributes so we can restore them later. */ tcgetattr (fdkbd, &kb_saved_attributes); /* Set the funny terminal modes. */ tcgetattr (fdkbd, &tattr); /* set non-canonical mode */ tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */ tattr.c_cc[VMIN] = 0; tattr.c_cc[VTIME] = 0; tcsetattr (fdkbd, TCSAFLUSH, &tattr); }
/*Для чтения клавы надо вызывать kb_get_key*/ char kb_get_key (void){ char r; if (read(fdkbd,&r,1)==0){ return 0; } else return r; }
Всё началось когда я делал чтение данных по СОМ из девайса, естественно пришлось read/write сделать неблокирующими,затем обкурившись манов я пришёл к выводу, что действие termios и ioctl распространяется и на клаву, поэтому и её ввод можно сделать не блокирующим, так и получилось.
Кук удалось замутить проект под линухом и ГЦЦ, до сих пор удивляюсь, я в них ваще не рублю (да и на Ц почти не пишу), была книга по юниксу 1985г(с кратким описанием системных функций и Ц, и как запускать компилятор) далее маны/инфо/ru.unix.prog
И если я не ошибаюсь, termios и ioctl есть в VC от MS для соответствия какому-то там стандарту.