我正在用 c/c++ 实现一个密钥阅读器程序。我正在使用Linux。我知道无缓冲的 getchar 函数将返回很少的键数据值。对于所有 ASCII 键(az、AZ、1-9、标点符号、回车、制表符和 ESC),getchar() 将返回一个值。对于其他键,例如方向键,会读取 ESC 键,但是当再次调用 getchar() 时,它会得到另一个值(A、B、C 或 D)。
A = 65
乙 = 66
向上箭头 = 27 91 65
F5 = 27 91 49 53 126
ESC = 27
完整的桌子在这里
有没有办法检查是否有更多的字符要读取或者是否只有一个字符?当一个键被读取并且它的第一个值是 ESC 我不知道它是一个以 ESC 开头的功能键还是只是 ESC 键。
#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <iostream>
#include <string>
#include <termios.h>
#include <unistd.h>
using namespace std;
int main(int argc, char *argv[]) {
int ch[5];
int i;
struct termios term;
tcgetattr( STDIN_FILENO, &term );
term.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &term );
ch[0] = getchar();
// If ch[0] = 27 and there is more data in the buffer
// printf("You pressed a function key");
// Else
// printf("You pressed ESC");
return 0;
}