【发布时间】:2020-05-13 15:42:06
【问题描述】:
我正在尝试获取一个函数,该函数将返回从控制台读取的所有字符,包括 ctrl 字符,例如 ctrl-c。这都是在 linux 中使用 c++ 实现的。
但是它目前不返回 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;
}
【问题讨论】:
-
查看手册页,我想您可能想清除
c_lflag中的ISIG位? -
@NateEldredge 问题是我仍然需要生成信号。我在单独的代码中有一个信号处理程序,问题是我必须等待
getc(stdin)返回才能处理处理程序的结果。 -
嗯,我不确定你能不能吃蛋糕也能吃。如果读取的字符是 Ctrl-C,你能清除
ISIG然后手动raise(SIGINT)吗?
标签: c++ linux terminal termios