Ich arbeite derzeit an einer Bibliothek für serielle Ports, die bereits spezielle Frameworks verwendet, um Informationen über serielle Ports auf dem System zu erhalten. Obwohl serielle Ports ein grundlegendes Design in Unix sind – wie eine Antwort wie diese beweist – dachte ich, dass ein guter Weg, um zu testen, ob eine Datei ein serieller Port ist, darin besteht, den Hauptmodus des Zeichengeräts zu testen
und zu überprüfen ob es sich tatsächlich um ein TTY
handelt oder nicht.
Beim Durchstöbern des Internets konnte ich keine Dokumentation finden, die sich mit den Hauptmodi von TTY
befasst s über Unices. Nun, es gibt nur eine Linux-Manpage, die besagt, dass ptmx den Hauptmodus 5 hat.
Obwohl ich aufgrund dieser Stack Overflow
-Frage bereits nach den Implementierungsdetails von tty character device gefragt habe, dachte ich, ich könnte die Unix Stack Exchange-Community bitten, herauszufinden, wie stabil sind die tty-Werte über Unix-Varianten hinweg.
Daher bitte ich Sie um Ihre Hilfe beim Aufbau einer Wissensbasis des Major-Modus aller Ihrer tty
-Dateien auf Ihrem(n) System(en), d. h.:Was ist der Major-Modus von
- echte serielle Schnittstellen?
- Pseudoterminal (
PTS
) Häfen? FTDI-USB
Serielle Schnittstellen?- anderer
USB
Serielle Schnittstellen?
Um die Werte für den Hauptmodus eines Zeichengeräts zu erhalten, sollten Sie Folgendes verwenden:
% stat -f " * %N: %Hr%n" /dev/tty* /dev/pts/*
* /dev/ttys001: 16
^^- major mode
oder mit dem guten alten ls
:
% ls -l /dev/ttys001
crw--w---- 1 <user> tty 16, 1 Apr 30 03:25 /dev/ttys001
major mode -^^ ^^- minor mode
Sie können selbst Informationen in die Antwort einfügen oder die Community-Wiki-Antwort mit zusätzlichen Informationen erweitern.
Akzeptierte Antwort:
Unix-Version 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
(noch kein PTY vorhanden)
Linux 3.2.0 (Debian Wheezy).
Hinweis:Sie können diese auch finden, indem Sie /dev
suchen für im Besitz der Gruppe tty
und Wählen
. Das ist eine Debian-Sache.
- Virtuelle Konsolen
/dev/tty[0-9]*
:4
- Echte serielle Ports:
/dev/ttyS[0-9]+
:4
- Pseudoterminals:
/dev/pts/[0-9]+
:136/dev/pts/ptmx
:5
- Serieller FTDI-USB-Anschluss:
/dev/ttyUSB[0-9]+
:188
- Serieller USB-Port:(AVR embedded USB/Arduino Uno )
/dev/ttyACM[0-9]+
:166
Linux 3.4.0 (Android 4.4.2 / Nexus 5)
Hinweis:hat alle Linux-Versionen plus:
- ttyACM (Zellenmodemsteuerung)
- (kein
/dev
Eintrag anscheinend):166
- (kein
- ttyHSL (Bluetooth)
/dev/ttyHSL0
:247
- ttyHS (Bluetooth)
/dev/ttyHS99
:248
Darwin 13.1.0 (MacOS 10.9.2):
- Echte serielle Ports:
/dev/ttys[0-9a-f]
:4
- Pseudoterminals:
/dev/ttys[0-9]{3}
:16
- Serieller FTDI-USB-Anschluss:
/dev/tty.usbserial.*
:18
- Serieller USB-Port:(AVR embedded USB/Arduino Uno )
/dev/tty.usbmodem.*
:18
Solaris 10 x86/amd64:
-
Pseudoterminals:
/dev/pty[p-r][0-9a-f]
(pty master):25/dev/tty[p-r][0-9a-f]
(pty Sklave):26/dev/pts/[0-9]+
:24/dev/ptmx
:23
-
Serielle Geräte:
/dev/tty[abc...]
auch bekannt als/dev/term/[abc...]
oder/dev/tty0[012..]
(uart-Seriennummer, auch ):106- auch als
/dev/ttyd[012...]
aber mit anderer schnittstelle (dial, modem) auch auf 106 aber hochuntergeordnet.
OpenBSD 6.0
Wie im Kommentar in /dev/MAKEDEV
dokumentiert
- Serielle PC/AT-UART-Ports:
/dev/tty[0-7][0-9a-f][code> :8
/dev/cua[0-7][0-9a-f][code> :8
- Serielle Anschlüsse von Cyclades:
/dev/ttyc*
:38/dev/cuac*
:38
- Serielle Virtio-Ports:
/dev/ttyVI*
:94
- Serielle USB-Ports:
/dev/ttyU[0-3]
:66/dev/cuaU[0-3]
:66
- wscons-Terminals:
/dev/tty[C-J][0-b]
:12
- Pseudo-Terminal-Master und -Slave (Nicht-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 und TrueOS
Bei FreeBSD (und seinen Derivaten wie TrueOS) weist Ihre Idee einen fatalen Fehler auf. Es gibt keine Major+Minor-Gerätenummernschema in FreeBSD.
Die devfs
Pseudo-Dateisystem unter FreeBSD, üblicherweise unter /dev
gemountet , verwendet überhaupt kein Major+Minor-System zum Gruppieren von Geräten in „Major“-Klassen. Eher die rdev für das Gerät ist die gleiche wie seine I-Node-Nummer im Pseudo-Dateisystem, wobei I-Nodes einfach in aufsteigender Reihenfolge zugewiesen werden, wenn Geräteknoten generiert werden, abhängig von der genauen Hardware auf der Maschine, die zu diesem Zeitpunkt vorhanden ist.
Daher kann die Gerätenummer nicht als Abkürzung für isatty()
verwendet werden .