首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让getc(stdin)返回ctrl字符?

问如何让getc(stdin)返回ctrl字符?
EN

Stack Overflow用户
提问于 2020-05-13 23:42:07
回答 1查看 55关注 0票数 0

我正在尝试获取一个函数,该函数将返回从控制台读取的所有字符,包括ctrl字符,如ctrl-c。这一切都是在带有c++的linux上实现的。

但是,它目前不返回ctrl-c。我不确定是否有其他终端设置允许这样做。

这是我目前正在做的工作

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-14 03:02:22

这些不是字符,它们是控制事件。我相信在C++中没有标准的方式来“阅读”它们,但是存在特定于平台的解决方案。例如,在Windows中,您有SetConsoleCtrlHandler函数来处理控制事件,而在Linux中,它们是作为信号发送的,并且可以使用signal或sigaction函数来捕获。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61778901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档