V současné době pracuji na knihovně sériových portů, která již používá speciální rámce k získání informací o sériových portech v systému. Ačkoli sériové porty jsou základním návrhem v Unixu – jak dokazuje odpověď, jako je tato – myslel jsem si, že dobrý způsob, jak otestovat, zda je soubor sériový port, je otestovat hlavní režim znakového zařízení
a zkontrolovat zda se skutečně jedná o TTY
nebo ne.
Při procházení internetu jsem nenašel žádnou dokumentaci hovořící o hlavních režimech TTY
s napříč unices. No, existuje pouze jedna manuálová stránka Linuxu, která uvádí, že ptmx má hlavní režim 5.
Ačkoli jsem se již ptal na podrobnosti implementace znakového zařízení tty na základě této otázky Stack Overflow
, napadlo mě, že bych mohl požádat komunitu Unix Stack Exchange, aby zjistili jak stabilní hodnoty tty jsou napříč variantami Unixu.
Žádám vás tedy o pomoc s vytvořením znalostní báze hlavního režimu všech vašich souborů tty
na vašem systému (systémech), tj. jaký je hlavní režim
- skutečné sériové porty?
- pseudoterminál (
PTS
) porty? FTDI USB
Sériové porty?- jiné
USB
Sériové porty?
Chcete-li získat hodnoty pro hlavní režim znakového zařízení, podívejte se pomocí:
% stat -f " * %N: %Hr%n" /dev/tty* /dev/pts/*
* /dev/ttys001: 16
^^- major mode
nebo pomocí starého dobrého ls
:
% ls -l /dev/ttys001
crw--w---- 1 <user> tty 16, 1 Apr 30 03:25 /dev/ttys001
major mode -^^ ^^- minor mode
Můžete vložit informace do své vlastní odpovědi nebo rozšířit komunitní wiki odpověď o další informace.
Přijatá odpověď:
Unix verze 7 (1979):
# 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
(zatím tam není pty)
Linux 3.2.0 (debian wheezy).
Poznámka:Můžete je také najít vyhledáním /dev
pro vlastněné skupinou tty
a dialout
. To je věc Debianu.
- Virtuální konzole
/dev/tty[0-9]*
:4
- Skutečné sériové porty:
/dev/ttyS[0-9]+
:4
- Pseudoterminál:
/dev/pts/[0-9]+
:136/dev/pts/ptmx
:5
- Sériový port USB FTDI:
/dev/ttyUSB[0-9]+
:188
- Sériový port USB:(USB/Arduino Uno vestavěný AVR )
/dev/ttyACM[0-9]+
:166
Linux 3.4.0 (Android 4.4.2 / Nexus 5)
Poznámka:má všechny linuxové plus:
- ttyACM (řízení mobilního modemu)
- (ne
/dev
vstup, zřejmě):166
- (ne
- ttyHSL (Bluetooth)
/dev/ttyHSL0
:247
- ttyHS (Bluetooth)
/dev/ttyHS99
:248
Darwin 13.1.0 (MacOS 10.9.2):
- Skutečné sériové porty:
/dev/ttys[0-9a-f]
:4
- Pseudoterminál:
/dev/ttys[0-9]{3}
:16
- Sériový port USB FTDI:
/dev/tty.usbserial.*
:18
- Sériový port USB:(USB/Arduino Uno vestavěný AVR )
/dev/tty.usbmodem.*
:18
Solaris 10 x86/amd64:
-
Pseudo terminály:
/dev/pty[p-r][0-9a-f]
(pty master):25/dev/tty[p-r][0-9a-f]
(pty slave):26/dev/pts/[0-9]+
:24/dev/ptmx
:23
-
Sériová zařízení:
/dev/tty[abc...]
aka/dev/term/[abc...]
nebo/dev/tty0[012..]
(seriál uart, také):106- také jako
/dev/ttyd[012...]
ale s jiným rozhraním (vytáčení, modem) také na 106, ale vysoké minority.
OpenBSD 6.0
Jak je zdokumentováno v komentáři v /dev/MAKEDEV
- Sériové porty PC/AT UART:
/dev/tty[0-7][0-9a-f]
:8/dev/cua[0-7][0-9a-f]
:8
- Cykladské sériové porty:
/dev/ttyc*
:38/dev/cuac*
:38
- Sériové porty Virtio:
/dev/ttyVI*
:94
- Sériové porty USB:
/dev/ttyU[0-3]
:66/dev/cuaU[0-3]
:66
- Terminály wscons:
/dev/tty[C-J][0-b]
:12
- Pseudoterminál master and slave (jiný než UNIX 98)
/dev/pty[p-zP-T][0-9a-zA-Z]
:6/dev/tty[p-zP-T][0-9a-zA-Z]
:5
FreeBSD 10.0 a TrueOS
FreeBSD (a jeho deriváty jako TrueOS) je místo, kde váš nápad ukazuje fatální chybu. neexistuje schéma číslování major+minor zařízení ve FreeBSD.
devfs
pseudo-filesystem na FreeBSD, konvenčně připojený na /dev
, systém major+minor pro seskupování zařízení do „hlavních“ tříd vůbec nepoužívá. Spíše rdev protože zařízení je stejné jako číslo jeho i-uzlu v pseudo-souborovém systému, přičemž i-uzly jsou jednoduše přiřazeny ve vzestupném pořadí, jak jsou uzly zařízení generovány, v závislosti na přesném hardwaru na daném počítači v daném okamžiku.
Číslo zařízení tedy nelze použít jako zkratku pro isatty()
.