Ncurses CTRL + s hangs getch()
Ncurses CTRL + s hangs getch()
为什么在这个简单的程序中:
#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
开始诅咒时,终端处于烹饪模式,这遵循 XON/XOFF。 在诅咒手册页中,那被称为"流控字符">;POSIX将其称为"输出控制">:
IXON
Enable start/stop output control.
如果调用raw
,则会关闭XON/XOFF,您可以使用控制S
:
#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();
}
您的应用程序可以调用tcgetattr
来确定是否设置了底层 XON/XOFF 模式,但这无助于确定 curses 是否设置了原始模式:
- 诅咒总是将终端设置为原始模式,
- curses 模拟应用程序的熟/生模式,以及
- curses 没有应用程序可以调用的函数来查找当前状态。
我相信你正在经历XOFF/XON流控制。CtrlS是 XOFF,并停止输出,直到发送CtrlQ(XON(。您可以通过键入CtrlQ来恢复程序。
这不是代码的问题。它发生在终端层面。
相关文章:
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 为什么 getch 在按下函数或箭头键时返回三个值?
- getch() 像 dart 中的函数
- XInputGetState hangs
- Ncurses CTRL + s hangs getch()
- Getch 不断输出相同的值
- ncurses getch() 奇怪的输出?
- 控制台窗口未在开发C++中打开?即使也有 getch() ?
- 调用 getch() 时的分段错误
- getch() 函数在输入 key 时不执行任何操作
- 如何存储我从使用 getch(); 获得的用户输入
- C 中断或取消getch();
- 在C/C 中创建Custom Getch()方法
- gets() 和 getch() 有什么区别?
- getch()和clrscr()的C 替代方案
- 我是否错误地使用了 ncurses 库中的 getch() 函数
- getch()和_getch()之间的差异
- Non blocking getch()
- 诅咒库:为什么 getch() 会清除我的屏幕