我在 /dev 有 tty 设备,我在其中发送 AT 命令。我想逐行读取并在超时后停止读取文件。
12662 次
2 回答
4
您可以使用该程序stty
来配置 tty 设备。要查看终端 /dev/ttyS0 的设置,请尝试
stty -a -F /dev/ttyS0
关于超时的默认设置是min = 1; time = 0
,这意味着读取程序将读取直到至少一个字符被读取并且没有超时。使用例如
stty -F /dev/ttyS0 min 0 time 10
阅读程序(例如cat
)将在一秒钟后完成阅读,无论是否已阅读任何内容。参数的单位time
是十分之一秒;您可以查看man stty
更多信息。
于 2011-07-15T22:15:44.230 回答
1
从这里编译一些信息,您可以拥有以下类型的脚本:
#!/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 命令的返回值。根据手册,如果达到指定的超时,READ 将返回任何不同于 0 的值;当这种情况发生时,FLAG 被更新,退出读取循环。
于 2020-06-15T15:48:50.207 回答