为什么在这个简单程序中:
#include <curses.h>
#include <iostream>
int main() {
initscr();
keypad(stdscr, TRUE);
timeout(-1);
int c = getch();
std::cout << c << std::endl;
endwin();
}
按ctrl + s挂起吗?
当您开始使用initscr
进行诅咒时,终端处于cooked模式,该终端采用XON / XOFF。在curses手册页中,称为“流控制字符”; initscr
将其称为“输出控制”:
POSIX
如果调用IXON
Enable start/stop output control.
,则将XON / XOFF变为off,并且可以使用control raw
:
raw
您的应用程序可以调用S
以确定是否设置了基本的XON / XOFF模式,但这无助于确定curses是否设置了原始模式:
我相信您遇到了#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。
这与您的代码无关。这是在终端级别上发生的。