2012-02-20 11 views
4

私はforkpty()を使わずにtty(マスターとスレーブ)の新しいペアを作成する必要があります。 PTS(4)のヒトにおける C新しいttyをフォーク

は、その書き込み:

プロセスでは、/ dev/ptmxをオープン

、それは擬似端末マスタ(PTM)のためのファイル記述子を取得し、及び擬似端末スレーブ(PTS)デバイスが/ dev/ptsディレクトリに作成されます。 C言語で小さなプログラムで

、私はそのようには/ dev/ptmxをオープン:

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

しかし、/ dev内に作成新しいPTYがない/ /をPTS。

+2

なぜforkpty()を使用しないのですか?この宿題は割り当てですか? – Eregrith

+2

前の質問に対する回答を受け入れるようにしてください。 –

答えて

4

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

これは、直接開くのではなく、posix_openpt(3)を呼び出すほうが若干移植性が高い場合もあります。

+0

実際、 'posix_openpt'は移植性があります('/dev/ps/ptmx'はLinux固有であり、私が知っている付加価値はありません)。指示シーケンスは、 'posix_openpt'でマスターを作成し、それに' grantpt'でマスタにパラメータを与え、 'unlockpt'でロックを解除してから、スレーブのファイル名を取得して後で開きます'ptsname'で' ptsname'によって返されたファイル名を通常の 'open'で開きます。すべてPOSIX 1で説明されているように。 – Hibou57

+0

ここでは、「ptmx'についてのPOSIXの言葉」(http://pubs.opengroup.org/onlinepubs/009696899/functions/posix_openpt.html)があります。「標準の開発者は、マスタ擬似端末を複製するための特別なデバイス、/ dev/ptmxデバイスを追加する。しかし、合意に達することができず、新しい機能を追加すると他の実装が可能になると感じていました」Linux/dev/ps/ptmxの代わりに '/ dev/ptmx' – Hibou57

3

はここで話題に良いチュートリアルです:Using pseudo-terminals to control interactive programs, pty, pdip

特に、「疑似端子を介してプロセス間通信」タイトルの下に、ページの中央にあるサンプルソースを見てください。これは、それ自体をフォークするプロセスの例です。次に、2つのプロセスは、親プロセスが事前にオープンされたPTYを介して各プロセスを通信します。

関連する問題