我正在尝试制作一个命令行界面。我希望它处理Ctrl+ Z。它处理Ctrl+C就好了。现在,在处理+之前,我必须点击Ctrl+Z两次。这是处理+的代码:CtrlZCtrlZ
} else if (c == 26) { // ctrl-z
resetTerminal();
kill(getpid(), SIGTSTP);
setTerminal();
我知道为什么它必须被击中两次,但我不确定解决方案是什么。resetTerminal() 的代码是:
void resetTerminal() {
// reset terminal to the way it was
tcsetattr(STDIN_FILENO, TCSANOW, &tty_old);
}
它恢复为无效的旧终端设置:
tty_new.c_lflag &= ~(ICANON | ECHO | ISIG);
我不确定如何制作它,以便我可以恢复到旧的终端设置并传播Ctrl+Z并暂停我的程序。
有任何想法吗?谢谢。