1

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

有任何想法吗?谢谢。

4

0 回答 0