我有一个TTY设备在开发中,在那里我发送AT命令。我想逐行读取文件,超时后停止读取文件。
你可以使用以下程序 stty
来配置 tty 设备。要查看终端devttyS0的设置,请尝试以下方法
stty -a -F /dev/ttyS0
关于超时的默认设置是 min = 1; time = 0
这意味着读取程序将读取到至少一个字符,并且没有超时。使用e.g.
stty -F /dev/ttyS0 min 0 time 10
读取程序(e.g.)将在一秒钟后完成读取,无论是否有任何字符被读取。cat
)将在一秒钟后完成读取,无论是否有任何字符被读取。参数的单位是 time
是十分之一秒;你可以查看一下。man stty
以获取更多信息。
汇编一些信息,从 此处,你可以有一个脚本的种类。
#!/bin/bash
#SPECIFYING THE SERIAL PORT
SERIAL=ttyS0
#SETTING UP AN ERROR FLAG
FLAG="GO"
#OPENING SERIAL PORT FOR READING
exec 99</dev/${SERIAL}
#READING FROM SERIAL
while ["${FLAG}" == "GO" ]
do
#IF NO INPUT IS READ AFTER 5 SECONDS, AN ERROR FLAG IS RAISED
read -t 5 INPUT <&99
STATUS=$?
if test $STATUS -ne 0;
then
FLAG="ERROR"
fi
done
#CLOSING SERIAL PORT
exec 99>&-
当FLAG==GO时,脚本将从串口一次读取一行。STATUS变量获取READ命令的返回值,根据FLAG==GO,脚本每次从串口读取一行。根据 手册 如果达到指定的超时时间,READ将返回与0不同的任何内容;当发生这种情况时,FLAG将被更新,退出读取循环。