Miten pitäisi tehdä ohjelma, joka toimii muuten itsenäisesti, mutta havaitsee, jos jotain näppäintä on painettu. Ohjelmassa ei haluttaisi pysähtyä odottamaan, tuleeko merkki vai ei kovin pitkäksi aikaa. Tavalliset syötekomennot jäävät sitä paitsi odottamaan enteriä.
Löysin verkosta seuraavan ohjelman, mutta onkohan se vähän liian monimutkainen näin yksinkertaiselta näyttävään kysymykseen. Ainakin siinä tehdään kaksinkertainen työ, kun luettu merkki kirjoitetaan takaisin lukupuskuriin, ja tämän lisäksi asetellaan edestakaisin termios-rakenteen parametreja.
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int kbhit(void)
{
struct termios oldt, newt;
int ch;
int oldf;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
fcntl(STDIN_FILENO, F_SETFL, oldf);
if(ch != EOF)
{
ungetc(ch, stdin);
return 1;
}
return 0;
}
lähde:
http://stackoverflow.com/questions/22166074/is-there-a-way-to-detect-if-a-key-has-been-pressed