当前位置:首页  电脑知识  系统

linux系统stty有什么含义

linux系统stty有什么含义

日期:2023-04-14 08:21:02来源:浏览:

在linux中,stty全称“set tty”,意思为“设置tty”,是一个用于显示和修改terminal(终端)相关设置的命令;语法“stty [选项] [设置]”,stty命令不带参数可以打印终端行设置,加上“-a”选项可以打印得更详细些。

设备文件处理与磁盘文件的区别

  先说几个比较直观的感觉。首先,在你通过键盘(一般是标准的输入的终端设备),输入字符,直到你输入的回车键(键盘上面的 Enter 为回车键,不是换行键;换行的 ACCII 为 10,回车为 13;换行在程序中的体现就是 /n),你的程序才会有“反应”,给人一种好像就是回车后你的程序才接受到你输入的数据;

  其次,你在程序中写一个 printf(“This is a demo/n”); 你会发现你的下一个输出就是在下一行的最左边开始输出的,但是,回车与换行的本身功能是:

  /r 为 return,回车,即使光标回到当前行的头;

  /n为 newline,换行,即光标移动到当前位置的下一行。

  所以,说明进程将你的 /n 转化为了 /r/n。而在Linux下出现这些的原因,就是因为在终端设备与进程之间的中间,还有一个终端驱动器,里面有终端驱动函数。这里有两张图,便于大家理解。

  进程和终端间的数据传输和数据处理是由终端设备驱动程序来负责的,终端驱动程序是内核的一部分。可以通过tesetattr和tegetattr函数来改变终端驱动程序里里面的设置

Linux stty 命令

1、作用

  为了自己能够编写适合自己的终端驱动函数,即去修改终端驱动程序里面的设置。在Linux中有这个命令,就是 stty(set tty,设置tty)。

  stty:用于显示和修改终端命令行的相关设置(change and print terminal line settings)。

2、语法

stty [选项] [设置]stty [选项]

常用选项

  stty 命令不带参数可以打印终端行设置,加上 -a 参数可以打印得更详细些。

  stty size :可以显示终端的大小,即行数和列数。

  stty 命令还可以更改终端行的设置,格式如下:stty SETTING CHAR

  其中,SETTING可以是如下:

eof : 输入结束,文件结束,默认为Ctrl+D。比如:用cat >file来创建文件时,按Ctrl+D来结束输入。

erase : 向后删除字符,擦除最后一个输入字符,默认为Ctrl+?。注意默认情况下退格键Backspace不是删除字符。

intr : 中断当前程序,默认为Ctrl+C。

kill : 删除整条命令,删除整行,默认为Ctrl+U。

quit :退出当前程序,默认为Ctrl+/或Ctrl+|。

start : 启动屏幕输出,默认为Ctrl+Q。

stop :停止屏幕输出,默认为Ctrl+S。

susp : terminal stop当前程序,默认为Ctrl+Z。这样当前进程就会变成后台进程了。

werase:删除最后一个单词,默认为Ctrl+W。

  stty 命令还有一些其他用法,如:stty -echo 关闭回显(比如在脚本中用于输入密码时),然后再用 stty echo 打开回显。

#在命令行下,禁止输出大写的方法:
stty iuclc     #开启
stty -iuclc    #恢复

#在命令行下禁止输出小写:
stty olcuc    #开启
stty -olcuc   #恢复

#打印出终端的行数和列数:
stty size

#改变Ctrl+D的方法:
stty eof "string"
#系统默认是Ctrl+D来表示文件的结束,而通过这种方法,可以改变!

#屏蔽显示:
stty -echo   #禁止回显
stty echo    #打开回显
#测试方法:
stty -echo;read;stty echo;read

#忽略回车符:
stty igncr     #开启
stty -igncr    #恢复

3、使用示例

下面以xilinx的串口终端为例说明stty命令的使用方法。

在vivad0配置了两个串口分别是UART0和UART1,petalinx中设置UART1为调试串口,UART0和UART1分别对应分别对应/dev/ttyPS1和/dev/ttyPS0,可以用who命令看一下当前终端使用的是哪个串口:

可以看到当前终端使用的是ttyPS0

用 dmesg | grep ttyPS*可以查看当前终端对应哪个串口

可以看到ttyPS0对应串口的物理地址是0xff010000,从设备树中根据这个物理地址可以查到是哪个串口

1)查看当前终端信息:

stty -a

这个打印了当前终端的信息,一些参数解释如下:

speed 115200 baud:波特率是115200

cs8:数据是8位

ixon:流控打开,如果是-ixon则表示流控关闭

clocal:使能DTR/DTS

-parodd:失能奇校验

-parenb:失能奇偶校验

2)设置波特率115200,数据位8位:

  stty -F /dev/ttyPS1 115200 cs8

3)通过UART1发送数据:

  echo "qwert" > /dev/ttyPS1

4)查看UART1接受的数据

cat /dev/ttyPS1

通过串口工具向UART1发送数据,即可看到接受到的信息

  

相关推荐