即使没有打开,Linux终端驱动程序也会缓冲输入.这可能是一个有用的功能,特别是如果速度/奇偶校验/等.设置得当.
要复制较小操作系统的行为,请在打开时立即从端口读取所有挂起的输入:
...
int fd = open ("/dev/ttyS0",O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0)
exit (1);
set_blocking (fd,0); // disable reads blocked when no input ready
char buf [10000];
int n;
do {
n = read (fd,buf,sizeof buf);
} while (n > 0);
set_blocking (fd,1); // enable read blocking (if desired)
... // now there is no pending input
void set_blocking (int fd,int should_block)
{
struct termios tty;
memset (&tty,sizeof tty);
if (tcgetattr (fd,&tty) != 0)
{
error ("error %d getting term settings set_blocking",errno);
return;
}
tty.c_cc[VMIN] = should_block ? 1 : 0;
tty.c_cc[VTIME] = should_block ? 5 : 0; // 0.5 seconds read timeout
if (tcsetattr (fd,TCSANOW,&tty) != 0)
error ("error setting term %sblocking",should_block ? "" : "no");
}