ncurses中的nodelay()
和cbreak()
有什么不同?为什么要使用这些函数,因为我们有getch()
!如果我理解的话,getch()
允许在用户点击按键后直接获取密钥。所以nodelay
和cbreak
是没用的,不是吗?
发布于 2019-05-22 03:20:59
它们是两个完全不同的功能。
从文档中:
通常,tty驱动程序会缓冲键入的字符,直到键入换行符或回车符。cbreak例程禁用行缓冲和擦除/删除字符处理(中断和流控制字符不受影响),使用户键入的字符立即可供程序使用。nocbreak例程将终端返回到正常(熟食)模式。
..。
nodelay选项使getch成为非阻塞调用。如果没有准备好的输入,则getch返回ERR。如果禁用(bf为FALSE),getch将等待,直到按下某个键。
因此,如果您想要禁用行缓冲,则使用cbreak
,您可能出于多种原因想要禁用行缓冲。其一是避免每次打印输出后都必须使用fflush(stdout)
。启用行缓冲后,在打印换行符之前,通常不会在屏幕上显示打印输出。
nodelay
的描述是不言自明的。getch
不会等待,而是立即返回,无论是否按下任何键。
https://stackoverflow.com/questions/56245062
复制相似问题