5

我在 /dev 有 tty 设备,我在其中发送 AT 命令。我想逐行读取并在超时后停止读取文件。

4

2 回答 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 回答