PTY(3)

名称
openpty, forkpty - 疑似端末を入手する補助関数

ライブラリ
libutil

書式
#include <sys/types.h> #include <sys/ioctl.h> #include <termios.h> #include <libutil.h> int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) int forkpty(int *amaster, char *name, struct termios *termp, struct winsize *winp)

解説
openpty() 関数は、次に使用できる疑似端末をシステムから 入手しようとします ( pty(4) 参照 ) 。疑似端末を問題なく見つけると、スレーブデバイスの所有権を 現行プロセスの実際の UID に、 グループメンバーシップをグループ “tty” に ( このようなグループがシステムに存在する場合 ) 、所有者の 読み書き権とグループの書込み権を変更し、 revoke(2) を呼び出してラインの現在の使用を無効にしようとします。

引数 name が NULL ではない場合、 openpty() はスレーブ pty のパス名をこの領域にコピーします。 この配列で必要なスペースは、呼び出し側で割り振ります。

引数 termp か winp が NULL ではない場合、 openpty() は、これらの引数が指す構造体の termios 設定とウィンドウサイズ設定を 初期化します。

戻る場合は、 pty のマスタサイドとスレーブサイドのオープンファイル記述子が、 amaster と aslave が指す場所に戻されます。

forkpty() は最初に openpty() を呼び出し、次に使用できる疑似端末をシステムから入手します。 問題がない場合は、新しいプロセスが分岐されます。子プロセスでは、 pty のマスタサイドの記述子を閉じ、スレーブ pty で login_tty(3) を呼び出します。親プロセスでは、 pty のスレーブサイドの記述子を閉じます。 引数 amaster, name, termp そして winp は、 openpty() の引数と同じ働きをします。

戻り値
openpty() は、問題がなければ 0 を戻し、エラーが発生すると -1 を戻します。

forkpty() は、エラーが発生すると -1 を戻し、スレーブプロセスに 0 、親プロセスに スレーブプロセスのプロセス ID を戻します。

エラー
エラーが発生した場合、 openpty() はグローバル変数 errno を ENOENT に設定します。

forkpty() は、 fork(2) で説明してあるように、 errno を設定することがあります。

関連項目
chmod(2), chown(2), fork(2), getuid(2), open(2), revoke(2), login_tty(3), pty(4), termios(4), group(5)

バグ
呼び出しプロセスにスーパユーザの有効な UID がなければ、すべての アクションは実行できません。 pty を割り振れる限り ( forkpty() の場合は新しいプロセスを作成できる限り ) 、説明したステップを openpty() か forkpty() が続けられなくても通知はされません。