我正在尝试创建一个命令行界面。我希望它能够处理 Ctrl + Z 。它处理 Ctrl + C 就好了。现在,在处理 Ctrl + Z 之前,我必须按两次 Ctrl + Z 。这是处理 Ctrl + Z 的代码:
} 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 并暂停我的程序。
有什么想法吗?感谢。