ncurses中的nodelay()
和cbreak()
有什么区别?还有为什么使用这些功能,因为我们有getch()
!如果我了解,getch()
允许在用户按下键后立即获取键。所以nodelay
和cbreak
是没有用的吗?
答案 0 :(得分:0)
它们是两个完全不同的功能。
从文档中:
通常,tty驱动程序将缓冲键入的字符,直到键入换行符或回车符为止。 cbreak例程禁用行缓冲和擦除/杀死字符处理(中断和流控制字符不受影响),使用户键入的字符可立即用于程序。 nocbreak例程使终端返回正常(煮熟)模式。
...
nodelay选项使getch成为非阻塞调用。如果没有准备好输入,getch将返回ERR。如果被禁用(bf为FALSE),getch将等待直到按下某个键。
因此cbreak
是要禁用行缓冲的原因,出于多种原因,您可能希望这样做。一种是避免每次打印输出后都必须使用fflush(stdout)
。启用行缓冲后,在打印换行符之前,通常不会在屏幕上看到打印输出。
nodelay
的描述很容易解释。 getch
不会等待,但是无论是否按下任何键,都会立即返回。