我怎么能用超时读取tty文件?

时间:2011-07-15 22:06:06

标签: linux bash shell eof tty

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

2 个答案:

答案 0 :(得分:3)

您可以使用程序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以获取更多信息。

答案 1 :(得分:0)

here编译一些信息,您可以使用以下脚本:

#!/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命令的返回。根据{{​​3}},如果达到指定的超时,则READ将返回不同于0的任何值;否则,返回0。发生这种情况时,将更新FLAG,退出读取循环。