POSIX 的答案是tcflush()
:刷新未传输的输出数据、未读取的输入数据,或两者兼而有之。还有tcdrain()
等待输出被传输的。自从有一个 POSIX 标准(1988 年试用版)以来,它们就一直在 POSIX 中,尽管我不记得曾经直接使用过它们。
示例程序
编译此代码,以便调用生成的程序tcflush
:
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
int main(void)
{
char buffer[20] = "";
read(0, buffer, 1);
printf("%c\n", buffer[0]);
tcflush(0, TCIFLUSH);
read(0, buffer, 1);
printf("%c\n", buffer[0]);
tcflush(0, TCIFLUSH);
return 0;
}
示例对话框
$ ./tcflush
abc
a
def
d
$
好像是医生吩咐的。没有第二个tcflush()
,shell 会抱怨找不到命令ef
。tcflush()
如果您愿意,可以在第一次阅读之前放置一个。对于我的简单测试来说,这不是必需的,但如果我使用sleep 10; ./tcflush
然后提前输入,它会有所作为。
在 x86/64 机器上的 RHEL 5 Linux 以及 Mac OS X 10.7.4 上进行了测试。