Ncurses CTRL + s挂起getch()

问题描述 投票:1回答:2

为什么在这个简单程序中:

#include <curses.h>
#include <iostream>

int main() {
    initscr();
    keypad(stdscr, TRUE);
    timeout(-1);
    int c = getch();
    std::cout << c << std::endl;
    endwin();
}

ctrl + s挂起吗?

c++ ncurses
2个回答
4
投票

当您开始使用initscr进行诅咒时,终端处于cooked模式,该终端采用XON / XOFF。在curses手册页中,称为“流控制字符”initscr将其称为“输出控制”

POSIX

如果调用IXON Enable start/stop output control. ,则将XON / XOFF变为off,并且可以使用control raw

raw

您的应用程序可以调用S以确定是否设置了基本的XON / XOFF模式,但这无助于确定curses是否设置了原始模式:

  • curses总是将终端设置为原始模式,
  • curses为您的应用程序模拟煮熟/原始模式,并且
  • curses没有您的应用程序可以调用以找到当前状态的功能。

2
投票

我相信您遇到了#include <curses.h> #include <iostream> int main() { initscr(); raw(); // possibly what you intended keypad(stdscr, TRUE); timeout(-1); int c = getch(); std::cout << c << std::endl; endwin(); } Ctrl S为XOFF,并停止输出,直到发送Ctrl Q(XON)。您可能可以通过键入Ctrl Q

恢复程序。

这与您的代码无关。这是在终端级别上发生的。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.