我正在尝试获取一个函数,该函数将返回从控制台读取的所有字符,包括ctrl字符,如ctrl-c。这一切都是在带有c++的linux上实现的。
但是,它目前不返回ctrl-c。我不确定是否有其他终端设置允许这样做。
这是我目前正在做的工作
int ttyGetChar() {
struct termios newTerminalSettings;
struct termios oldTerminalSettings;
int result;
tcgetattr(STDIN_FILENO, &oldTerminalSettings); // get old settings
newTerminalSettings = oldTerminalSettings; // Copy to set up new settings
newTerminalSettings.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newTerminalSettings); // Apply the new settings
result = getc(stdin); // read one character under new settings
tcsetattr(STDIN_FILENO, TCSANOW, &oldTerminalSettings); // Restore the old settings
return result;
}发布于 2020-05-14 03:02:22
这些不是字符,它们是控制事件。我相信在C++中没有标准的方式来“阅读”它们,但是存在特定于平台的解决方案。例如,在Windows中,您有SetConsoleCtrlHandler函数来处理控制事件,而在Linux中,它们是作为信号发送的,并且可以使用signal或sigaction函数来捕获。
https://stackoverflow.com/questions/61778901
复制相似问题