我有一个串行设备/dev/ttyAMA0
。我有用 C 编写的程序与该设备通信。但除了C程序之外,我有时还需要从终端输入一些配置数据,例如:echo xxx >> /dev/ttyAMA0
.问题是设备回复此配置输入(类似parameter xxx set
),但我没有读取(因为我不需要)此回复,因此它缓冲在串行端口的缓冲区中。这会导致 C 程序出现问题,因为我需要从中读取数据,但已经缓冲了我不关心的回复。
所以我的问题。如何从终端刷新设备的缓冲区?我知道我可以在 C 中使用tcflush(sfd, TCIOFLUSH);
,但我需要从终端进行操作。
答案1
我知道这个答案晚了几年......但是这样的命令应该在 bash 中工作:
read garbage </dev/ttyAMA0
该行使用 bash 内置的“read”命令从串行接收缓冲区读取一行 ASCII 字符,并将其存储到名为“garbage”的变量中。 “<”重定向运算符告诉“read”从串行端口设备文件获取输入,而不是从默认的 stdin 获取输入。如果需要从缓冲区读取多行字符,可以将此命令放在循环中。
答案2
perl
tcflush()
在其 POSIX 模块中有一个接口:
perl -MPOSIX -e 'tcflush(0, TCIFLUSH)' < /dev/ttyAMA0
perldoc POSIX
详情请参阅。