ncurses中的nodelay()和cbreak()有什么区别?

时间:2019-05-21 19:16:13

标签: c ncurses

ncurses中的nodelay()cbreak()有什么区别?还有为什么使用这些功能,因为我们有getch()!如果我了解,getch()允许在用户按下键后立即获取键。所以nodelaycbreak是没有用的吗?

1 个答案:

答案 0 :(得分:0)

它们是两个完全不同的功能。

从文档中:

  

通常,tty驱动程序将缓冲键入的字符,直到键入换行符或回车符为止。 cbreak例程禁用行缓冲和擦除/杀死字符处理(中断和流控制字符不受影响),使用户键入的字符可立即用于程序。 nocbreak例程使终端返回正常(煮熟)模式。

     

...

     

nodelay选项使getch成为非阻塞调用。如果没有准备好输入,getch将返回ERR。如果被禁用(bf为FALSE),getch将等待直到按下某个键。

因此cbreak是要禁用行缓冲的原因,出于多种原因,您可能希望这样做。一种是避免每次打印输出后都必须使用fflush(stdout)。启用行缓冲后,在打印换行符之前,通常不会在屏幕上看到打印输出。

nodelay的描述很容易解释。 getch不会等待,但是无论是否按下任何键,都会立即返回。