zmo*_*zmo 7 linux solaris bsd tty serial-port
我目前正在研究一个串行端口库,它已经使用特殊框架来获取有关系统上串行端口的信息。虽然串行端口在基本设计Unix的一个答案,例如这一个证明,我认为,一个好办法,测试文件是否是一个串行端口是通过测试字符设备和检查的主要模式,这是否真的是一个TTY
与否。
在互联网上爬行,我找不到任何关于TTY
s 跨 unice的主要模式的文档。嗯,只有一个 Linux 手册页说明 ptmx 具有主要模式 5。
虽然我已经问基于TTY字符设备的实现细节,这个堆栈溢出 的问题,我想我可能会问了Unix堆栈交流社区,了解如何将TTY值稳定是跨越Unix操作系统。
因此,我请求您帮助建立系统上所有 tty 文件的主要模式的知识库,即:什么是主要模式
PTS
) 端口?FTDI USB
串口?USB
串口?要获取字符设备的主要模式的值,您应该使用:
% stat -f " * %N: %Hr%n" /dev/tty* /dev/pts/*
* /dev/ttys001: 16
^^- major mode
Run Code Online (Sandbox Code Playgroud)
或使用好旧ls
:
% ls -l /dev/ttys001
crw--w---- 1 <user> tty 16, 1 Apr 30 03:25 /dev/ttys001
major mode -^^ ^^- minor mode
Run Code Online (Sandbox Code Playgroud)
您可以将信息作为您自己的答案,或使用其他信息扩展社区 wiki 答案。
# ls -l /dev/console /dev/tty?*
crw--w--w- 1 root 0, 0 Sep 22 06:46 /dev/console
crw-rw-r-- 1 root 0, 1 Sep 22 05:47 /dev/tty1
crw-rw-r-- 1 root 0, 2 Sep 22 05:47 /dev/tty2
Run Code Online (Sandbox Code Playgroud)
(还没有 pty)
注意:您还可以通过搜索/dev
所拥有的组tty
和来找到这些dialout
。那是 Debian 的事情。
/dev/tty[0-9]*
: 4/dev/ttyS[0-9]+
: 4/dev/pts/[0-9]+
: 136/dev/pts/ptmx
: 5/dev/ttyUSB[0-9]+
: 188/dev/ttyACM[0-9]+
: 166注意:具有所有 linux 以及:
/dev
显然没有条目):166/dev/ttyHSL0
: 247/dev/ttyHS99
: 248/dev/ttys[0-9a-f]
: 4/dev/ttys[0-9]{3}
: 16/dev/tty.usbserial.*
: 18/dev/tty.usbmodem.*
: 18伪终端:
/dev/pty[p-r][0-9a-f]
(pty 主): 25/dev/tty[p-r][0-9a-f]
(pty 奴隶): 26/dev/pts/[0-9]+
: 24/dev/ptmx
: 23串行设备:
/dev/tty[abc...]
又名/dev/term/[abc...]
或/dev/tty0[012..]
(UART串行,也):106/dev/ttyd[012...]
但具有不同的接口(拨号、调制解调器)也在 106 上,但未成年人。如评论中所述 /dev/MAKEDEV
/dev/tty[0-7][0-9a-f]
: 8/dev/cua[0-7][0-9a-f]
: 8/dev/ttyc*
: 38/dev/cuac*
: 38/dev/ttyVI*
: 94/dev/ttyU[0-3]
: 66/dev/cuaU[0-3]
: 66/dev/tty[C-J][0-b]
: 12/dev/pty[p-zP-T][0-9a-zA-Z]
: 6/dev/tty[p-zP-T][0-9a-zA-Z]
: 5FreeBSD(及其衍生产品,例如 TrueOS)是您的想法显示出致命缺陷的地方。有没有FreeBSD中大+次设备号方案。
devfs
FreeBSD 上的伪文件系统,通常安装在/dev
,根本不使用主要+次要系统将设备分组为“主要”类。相反,设备的rdev与其在伪文件系统中的 i-node 编号相同,当设备节点生成时,i-node 只是按升序分配,这取决于当时手头机器上的确切硬件.
因此设备号不能用作isatty()
.