我如何在超时的情况下读取TTY文件?

问题描述 投票:5回答:2

我有一个TTY设备在开发中,在那里我发送AT命令。我想逐行读取文件,超时后停止读取文件。

linux bash shell eof tty
2个回答
3
投票

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


0
投票

汇编一些信息,从 此处,你可以有一个脚本的种类。

#!/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将被更新,退出读取循环。

© www.soinside.com 2019 - 2024. All rights reserved.