5

forkpty() を使用せずに、tty (マスターとスレーブ) の新しいペアを作成する必要があります。

man of pts(4) では、次のように書かれています。

プロセスが /dev/ptmx を開くと、疑似端末マスター (PTM) のファイル記述子が取得され、疑似端末スレーブ (PTS) デバイスが /dev/pts ディレクトリに作成されます。

C の小さなプログラムで、次のように /dev/ptmx を開きます。

open("/dev/ptmx", O_RDWR);

しかし、/dev/pts/ には新しい pty は作成されません。

4

2 に答える 2

5

このトピックに関する優れたチュートリアルは 次のとおりです。疑似端末を使用して対話型プログラム、pty、pdip を制御します。このリンクがエラー 403 で終わる場合、別のリンクを次に示します: http://rkoucha.fr/tech_corner/pty_pdip.html

特に、ページの真ん中にある「疑似端末を介したプロセス間通信」というタイトルのサンプルソースを見てください。これは、自分自身を fork するプロセスの例です。その後、2 つのプロセスは、親プロセスが以前に開いた PTY を介して相互に通信します。

于 2013-03-28T15:19:14.447 に答える
4

使用可能な pty ペアを実際に作成するには、open 呼び出しによって返された fd で grantpt(3) および unlockpt(3) も呼び出す必要があります。そのプロセスで、ファイルシステム内の実際のスレーブ pty ファイルノードが作成される正確な場所が明確に定義されていません。一部のシステム (通常、/dev/pts が特別なファイルシステムであるシステム) は、オープン時に作成しますが、他のシステムは作成しますこれは、grantpt または unlockpt 呼び出しの一部として行われます。また、スレーブが /dev/pts にあるという保証もありません。別の場所にある可能性もあります。そのため、ptsname(3) を呼び出してその場所を特定する必要があります。

また、直接開くよりも posix_openpt(3) を呼び出す方が移植性が少し高いかもしれません。

于 2012-02-20T19:16:51.480 に答える