从终端刷新 tty 设备缓冲区

从终端刷新 tty 设备缓冲区

我有一个串行设备/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

perltcflush()在其 POSIX 模块中有一个接口:

perl -MPOSIX -e 'tcflush(0, TCIFLUSH)' < /dev/ttyAMA0

perldoc POSIX详情请参阅。

相关内容