私は現在、システムのシリアルポートに関する情報を取得するために特別なフレームワークをすでに使用しているシリアルポートライブラリに取り組んでいます。シリアルポートは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()のショートカットとして使用することはできません。 。