c - ncurses中的nodelay()和cbreak()有什么区别?
问题描述
ncursesnodelay()
和in 和有什么不一样?cbreak()
为什么要使用这些功能,因为我们有getch()
!如果我理解getch()
允许在用户击键后直接获取密钥。所以nodelay
,cbreak
是没用的,不是吗?
解决方案
它们是两个完全不同的功能。
从文档中:
通常,tty 驱动程序会缓冲输入的字符,直到输入换行符或回车符。cbreak 例程禁用行缓冲和擦除/终止字符处理(中断和流控制字符不受影响),使用户键入的字符立即可供程序使用。nocbreak 例程将终端返回到正常(熟)模式。
...
nodelay 选项使 getch 成为非阻塞调用。如果没有输入准备好,getch 返回 ERR。如果禁用(bf 为 FALSE),getch 会一直等到按键被按下。
cbreak
如果您想禁用行缓冲也是如此,您可能出于多种原因想要这样做。一是避免fflush(stdout)
每次打印后都必须使用。启用行缓冲后,在打印换行符之前,通常不会在屏幕上看到打印输出。
的描述nodelay
非常不言自明。getch
不会等待,但无论是否按下任何键都会立即返回。
推荐阅读
- swift - 在firebase聊天中如何更新接收者用户的聊天消息发送迅速
- html - 更改下拉菜单的位置/方向
- python - Pandas Dataframe:在比较来自不同时区的数据时,如何考虑日期时间 DST
- xslt - 如何从文本节点中去除尾随句号(句点)
- javascript - 如何对数组进行排序,以便在第一个位置获得特定值?
- mercurial - 如何启用 Mercurial 主题(它是否是“实时”功能)?
- python - 循环不使用 Selenium 迭代,for 循环遍历列表
- javascript - 用于移动问题的 Swiper 初始化脚本
- qt - 如何设置突出显示始终适合它的 ListView
- r - 使用多个数据框绘制多条线时从 ggplot 中省略 NA 值