2

私はシリアルポートライブラリに取り組んでおり、キャラクターデバイスのメジャー/マイナーモードを使用して、指定されたファイルがプラットフォームシリアルポート、pty、または USB シリアルポートであるかどうかを確認することを考えています。 Linux または OSX に存在するフレームワーク。

実際、ファイルが USB シリアル ポートなのかプラットフォーム シリアル ポートなのかを調べるには、libudevLinux やIOKit OSX など、利用可能なフレームワークを使用する方法があります。PTYしかし、ファイルをチェックするには、古き良きものを使用するしか方法はない と思いますstat():

#if defined(OS_LINUX)
#define PTY_MAJOR_NODE 136
#elif defined(OS_MAC)
#define PTY_MAJOR_NODE 16
#elif defined(OS_SOLARIS)
#define PTY_MAJOR_NODE 24
#endif

bool is_pty(const char* file) {
    struct stat filestat;
    if (0 == stat(file, &filestat)
            && S_ISCHR(filestat.st_mode)
            && major(filestat.st_rdev) == PTY_MAJOR_NODE) {
        return true;
    }
    return false;
}

これまでのところ、debian Linux でPTSchardev のメジャー モードがすべて 136であり、OSX ではすべての PTS のモードが16. ddg をクロールすると、Solaris がメジャー モードを使用している可能性があることがわかりました。24.

PTY/PTS とは何か、およびその歴史について話している多くのリソースをオンラインで見つけることができました。openptypty、またはptsのマンページは、メジャーとマイナーを示していますが、デバイス/dev/ptmxのメジャー/マイナーモードについては言及していません。PTSまた、ユニス全体の主要モードをリストするリソースはありません。

だからここに私の質問があります:

  • PTS特定の Unix フレーバーに対して (および拡張により他のシリアル chardev)のメジャー モードは安定していますか? (±2年で安定するものを探しています)
  • それらはどこで定義されていますか?それを処理するのはカーネルドライバーだと思いますね。
  • これがどのような種類のデバイスであるかを検出するために、chardev のメジャー モードに依存するのは良い考えですか?

注意: unix.SEに投稿することをためらっていますが、コードでそれを使用するコンテキストにいるので、これはここで、SO で尋ねる質問であると考えました。

編集: 関連する質問を unix.SEに投稿し、他の主要なモードを見つけて、それらがシステム間でどれほど安定しているかを調べてください。私の推測では、誰も答えを持っていない場合、少なくともシステムに問い合わせて情報源を調べることができます。

4

1 に答える 1