我正在创建一个ncurses程序,该程序使用AppKit读取系统范围的按键。为了清除我在运行程序时在命令行上累积的文字墙,我在退出程序之前执行此代码行。

while((c = getch()) != '\n' && c != EOF) {}


我的问题是,是否有更有效的方法来解决此问题。例如,在程序执行时禁用命令行输入。

编辑:

我进行了一些测试,但我的问题似乎源于usleep而不是ncurses或AppKit。这是一个例子:

#include <unistd.h>

int main() {
    usleep(5000000);
    return 0;
}

最佳答案

tcflush(STDIN_FILENO, TCIFLUSH)之前尝试exit()



根据tcflush(3)


int tcflush(int fd, int queue_selector);

tcflush()根据fd的值,丢弃写入由queue_selector引用但未发送的对象的数据,或接收但不读取的数据:

TCIFLUSH :刷新已接收但未读取的数据。
TCOFLUSH :刷新已写入但未传输的数据。
TCIOFLUSH:刷新接收到但未读取的数据,以及写入但未传输的数据。

09-28 08:47