我正在开发一个程序,该程序将从控制台接收用户输入,并在单独的线程中输出。我想避免这样的情况:用户在输入内容的过程中途中途遇到了printf并在光标处进行打印。

有没有一种方法可以从控制台窗口在C语言中进行非阻塞io?理想情况下,捕获按键或类似内容,以使用户键入的内容不会出现在屏幕上。我正在Ubuntu中进行开发,最好不要使用ncurses之类的东西。

最佳答案

使用termios可以禁用终端回显:

#include <termios.h>

struct termios oflags, nflags;
tcgetattr(fileno(stdin), &oflags);
nflags = oflags;
nflags.c_lflag &= ~ECHO;
nflags.c_lflag |= ECHONL;

if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) {
    /* handle error */
}

然后在退出之前(使用atexit),您必须还原终端:
if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) {
    /* handle error */
}

09-26 11:51