.\" .\" Copyright (c) 1996 Joerg Wunsch .\" .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" %FreeBSD: src/lib/libutil/pty.3,v 1.8.2.3 2001/12/17 10:08:32 ru Exp % .\" $FreeBSD$ .\" " .Dd December 29, 1996 .Os .Dt PTY 3 .Sh 名称 .Nm openpty , .Nm forkpty .Nd 疑似端末を入手する補助関数 .Sh ライブラリ .Lb libutil .Sh 書式 .In sys/types.h .In sys/ioctl.h .In termios.h .In libutil.h .Ft int .Fn openpty "int *amaster" "int *aslave" "char *name" "struct termios *termp" "struct winsize *winp" .Ft int .Fn forkpty "int *amaster" "char *name" "struct termios *termp" "struct winsize *winp" .Sh 解説 .Fn openpty 関数は、次に使用できる疑似端末をシステムから 入手しようとします ( .Xr pty 4 参照)。疑似端末を問題なく見つけると、スレーブデバイスの所有権を 現行プロセスの実際の UID に、 グループメンバシップをグループ .Dq tty に (このようなグループがシステムに存在する場合)、所有者の 読み書き権とグループの書込み権を変更し、 .Xr revoke 2 を呼び出してラインの現在の使用を無効にしようとします。 .Pp 引数 .Fa name が .Dv NULL ではない場合、 .Fn openpty はスレーブ pty のパス名をこの領域にコピーします。 この配列で必要なスペースは、呼び出し側で割り振ります。 .Pp 引数 .Fa termp か .Fa winp が .Dv NULL ではない場合、 .Fn openpty は、これらの引数が指す構造体の termios 設定とウィンドウサイズ設定を 初期化します。 .Pp 戻る場合は、 pty のマスタサイドとスレーブサイドのオープンファイル記述子が、 .Fa amaster と .Fa aslave が指す場所に戻されます。 .Pp .Fn forkpty は最初に .Fn openpty を呼び出し、次に使用できる疑似端末をシステムから入手します。 問題がない場合は、新しいプロセスが分岐されます。子プロセスでは、 pty のマスタサイドの記述子を閉じ、スレーブ pty で .Xr login_tty 3 を呼び出します。親プロセスでは、 pty のスレーブサイドの記述子を閉じます。 引数 .Fa amaster , .Fa name , .Fa termp そして .Fa winp は、 .Fn openpty の引数と同じ働きをします。 .Sh 戻り値 .Fn openpty は、問題がなければ 0 を戻し、エラーが発生すると -1 を戻します。 .Pp .Fn forkpty は、エラーが発生すると -1 を戻し、スレーブプロセスに 0、親プロセスに スレーブプロセスのプロセス ID を戻します。 .Sh エラー エラーが発生した場合、 .Fn openpty はグローバル変数 .Dv errno を .Er ENOENT に設定します。 .Pp .Fn forkpty は、 .Xr fork 2 で説明してあるように、 .Dv errno を設定することがあります。 .Sh 関連項目 .Xr chmod 2 , .Xr chown 2 , .Xr fork 2 , .Xr getuid 2 , .Xr open 2 , .Xr revoke 2 , .Xr login_tty 3 , .Xr pty 4 , .Xr termios 4 , .Xr group 5 .Sh バグ 呼び出しプロセスにスーパユーザの有効な UID がなければ、すべての アクションは実行できません。 pty を割り振れる限り ( .Fn forkpty の場合は新しいプロセスを作成できる限り)、説明したステップを .Fn openpty か .Fn forkpty が続けられなくても通知はされません。