Linux上のすべてのシリアルデバイス(ttyS、ttyUSBなど)を開かずに見つける方法は?
Linuxシステムで利用可能なすべてのシリアルポート/デバイスのリストを取得する適切な方法は何ですか? つまり、ですべてのデバイスを反復処理する場合/dev/、どのデバイスが従来の方法でシリアルポートであるか、つまり、通常はボーレートとRTS / CTSフロー制御をサポートするデバイスかをどのように確認しますか? ソリューションはCでコーディングされます。 私がこれを明らかに間違っているサードパーティのライブラリを使用しているので、私は尋ねます:反復するだけのよう/dev/ttyS*です 問題は、たとえば、USB経由のシリアルポート(USB-RS232アダプターによって提供される)があり、それらが/ dev / ttyUSB *の下にリストされていることです。そして、読みLinux.orgでシリアル-HOWTOを、私は時間が来ると、同様に他の名前空間があるだろうというアイデアを得ます。 したがって、シリアルデバイスを検出する公式の方法を見つける必要があります。問題は、文書化されていないように見えるか、見つからないことです。 1つの方法は、シリアルデバイスでのみ使用可能なすべてのファイルを開き、それらの/dev/tty*特定のファイルを呼び出すioctl()ことだと思います。しかし、それは良い解決策でしょうか? 更新 hrickardは「setserial」のソースを調べることを提案しました。そのコードは私が念頭に置いていたものとまったく同じです: まず、次のコマンドでデバイスを開きます。 fd = open (path, O_RDWR | O_NONBLOCK) 次に、それを呼び出します: ioctl (fd, TIOCGSERIAL, &serinfo) その呼び出しがエラーを返さない場合、それは明らかにシリアルデバイスです。 シリアルプログラミング/ termiosで同様のコードを見つけましたO_NOCTTY。オプションを追加することも提案されています。 ただし、このアプローチには1つの問題があります。 このコードをBSD Unix(つまりMac OS X)でテストしたところ、うまくいきました。ただし、Bluetoothを介して提供されるシリアルデバイスは、システム(ドライバー)がBluetoothデバイスに接続しようとするため、タイムアウトエラーで戻るまでにしばらく時間がかかります。これは、デバイスを開くだけで発生します。Linuxでも同様のことが起こると想像できます。理想的には、デバイスを開いてそのタイプを判別する必要はないはずです。ioctlオープンせずに関数を呼び出す方法、または接続が行われないようにデバイスを開く方法もあるのでしょうか。 私は何をすべきか?