如何在自定义命令行界面中处理ctrl-z?

时间:2012-05-29 20:33:01

标签: signals termios

我正在尝试创建一个命令行界面。我希望它能够处理 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 并暂停我的程序。

有什么想法吗?感谢。

0 个答案:

没有答案