私は現在、システムのシリアルポートに関する情報を取得するために特別なフレームワークをすでに使用しているシリアルポートライブラリに取り組んでいます。シリアルポートはUnixの基本的な設計ですが、このような答えが証明しているように、ファイルがシリアルポートであるかどうかをテストする良い方法は、キャラクターデバイスのメジャーモードをテストして確認することだと思いました。
これが実際にTTY
であるかどうか かどうか。
インターネットをクロールしていると、TTY
の主なモードについて説明しているドキュメントが見つかりませんでした。 ユニス全体。ええと、ptmxにはメジャーモード5があると述べているLinuxのマニュアルページは1つだけです。
このStackOverflowの質問に基づいてtty文字デバイスの実装の詳細についてはすでに質問しましたが
、UnixStackExchangeコミュニティに方法を尋ねるかもしれないと思いました。 安定したtty値はUnixフレーバー全体にあります。
ですから、システム上のすべてのtty
ファイルのメジャーモードのナレッジベースを構築するために、あなたの助けを求めています。つまり、メジャーモードは何ですか
- 実際のシリアルポート?
- 擬似端末(
PTS
)ポート? -
FTDI USB
シリアルポート? - その他の
USB
シリアルポート?
キャラクターデバイスのメジャーモードの値を取得するには、次を使用して確認する必要があります。
% stat -f " * %N: %Hr%n" /dev/tty* /dev/pts/*
* /dev/ttys001: 16
^^- major mode
または古き良きls
を使用する :
% ls -l /dev/ttys001
crw--w---- 1 <user> tty 16, 1 Apr 30 03:25 /dev/ttys001
major mode -^^ ^^- minor mode
独自の回答に情報を追加することも、コミュニティWikiの回答を追加情報で拡張することもできます。
承認された回答:
Unixバージョン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
(まだptyはありません)
Linux 3.2.0(debian wheezy)。
注:/dev
を検索してこれらを見つけることもできます グループtty
が所有する場合 およびdialout
。それはDebianのことです。
- 仮想コンソール
-
/dev/tty[0-9]*
:4
-
- 実際のシリアルポート:
-
/dev/ttyS[0-9]+
:4
-
- 擬似端末:
-
/dev/pts/[0-9]+
:136 -
/dev/pts/ptmx
:5
-
- FTDI USBシリアルポート:
-
/dev/ttyUSB[0-9]+
:188
-
- USBシリアルポート:(AVR組み込みUSB/ Arduino Uno )
-
/dev/ttyACM[0-9]+
:166
-
Linux 3.4.0(Android 4.4.2 / Nexus 5)
注:すべてのLinuxに加えて:
- ttyACM(セルモデム制御)
- (
/dev
はありません エントリ、明らかに):166
- (
- ttyHSL(Bluetooth)
-
/dev/ttyHSL0
:247
-
- ttyHS(Bluetooth)
-
/dev/ttyHS99
:248
-
Darwin 13.1.0(MacOS 10.9.2):
- 実際のシリアルポート:
-
/dev/ttys[0-9a-f]
:4
-
- 擬似端末:
-
/dev/ttys[0-9]{3}
:16
-
- FTDI USBシリアルポート:
-
/dev/tty.usbserial.*
:18
-
- USBシリアルポート:(AVR組み込みUSB/ Arduino Uno )
/dev/tty.usbmodem.*
:18
Solaris 10 x86 / amd64:
-
擬似端末:
-
/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でもインターフェイス(ダイヤル、モデム)が異なりますが、未成年者は多くなります。
-
OpenBSD 6.0
/dev/MAKEDEV
の解説に記載されているとおり
- PC / AT UARTシリアルポート:
-
/dev/tty[0-7][0-9a-f]
:8 -
/dev/cua[0-7][0-9a-f]
:8
-
- Cycladesシリアルポート:
-
/dev/ttyc*
:38 -
/dev/cuac*
:38
-
- Virtioシリアルポート:
-
/dev/ttyVI*
:94
-
- USBシリアルポート:
-
/dev/ttyU[0-3]
:66 -
/dev/cuaU[0-3]
:66
-
- wscons端末:
-
/dev/tty[C-J][0-b]
:12
-
- 擬似端末のマスターとスレーブ(UNIX以外の98)
-
/dev/pty[p-zP-T][0-9a-zA-Z]
:6 -
/dev/tty[p-zP-T][0-9a-zA-Z]
:5
-
FreeBSD10.0およびTrueOS
FreeBSD(およびTrueOSなどのその派生物)は、あなたのアイデアが致命的な欠陥を示しているところです。 ありません FreeBSDのメジャー+マイナーデバイス番号スキーム。
devfs
FreeBSD上の疑似ファイルシステム。通常は/dev
にマウントされます。 、デバイスを「メジャー」クラスにグループ化するためにメジャー+マイナーシステムをまったく使用しません。むしろ、 rdev デバイスの場合、疑似ファイルシステムのiノード番号と同じです。デバイスノードが生成されるときに、その時点でのマシンの正確なハードウェアに応じて、iノードが昇順で単純に割り当てられます。
そのため、デバイス番号をisatty()
のショートカットとして使用することはできません。 。