openpty - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
openpty, login_tty, forkpty - 端末 (tty) ユーティリティ関数
書式
#include <pty.h>
/* openpty と forkpty 用 */
#include <utmp.h>
/* login_tty 用 */
int openpty(int *
amaster
, int *
aslave
, char *
name
, struct termios *
termp
, struct winsize *
winp
);
int login_tty(int
fd
);
pid_t forkpty(int *
amaster
, char *
name
, struct termios *
termp
, struct winsize *
winp
);
-lutil でリンクする。
説明
openpty
()関数は、使用可能な疑似端末 (pseudo-terminal) を見つけて、
マスタとスレーブのファイル・ディスクリプタを
amaster
と
aslave
に入れて返す。
name
が NULL でない場合、スレーブのファイル名が
name
に返される。
termp
が NULL でない場合、スレーブの端末パラメータは
termp
の値に設定される。
winp
が NULL でない場合、スレーブのウインドウサイズは
winp
に設定される。
login_tty
()関数は、端末
fd
にログインする準備をする
(
fd
は実際の端末デバイスでも、
openpty
()で返される疑似端末のスレーブでもよい)。
具体的には、新しいセッションを作成し、
fd
をカレント・プロセスの制御端末とし、
カレント・プロセスの標準入力・標準出力・標準エラーのストリームを
fd
に設定した後、
fd
をクローズする。
forkpty
()関数は
openpty
(),
fork
(),
login_tty
()を組み合わせ、疑似端末を操作する新しいプロセスを生成する。
疑似端末のマスタ側のファイル・ディスクリプタは
amaster
に返され、
name
が NULL でない場合には、スレーブのファイル名が
name
に返される。
termp
と
winp
パラメータは、NULL でなければ、
疑似端末のスレーブ側の端末属性とウインドウサイズを決定する。
返り値
openpty (), login_tty (), forkpty ()の呼び出しが成功しなかった場合、 -1 が返されて、 errno はエラーを示す値に設定される。 成功した場合、 openpty (), login_tty ()および forkpty ()の子プロセスは 0 を返し、 forkpty ()の親プロセスは子プロセスのプロセス ID を返す。
エラー
以下の場合に openpty ()は失敗する:
- ENOENT
-
使用可能な端末がない。
ioctl ()が fd をカレントプロセスの制御端末に設定するのに失敗した場合、 login_pty ()は失敗する。
openpty ()または fork ()のどちらかが失敗した場合、 forkpty ()は失敗する。
注意
これらの関数は libutil に含まれている。したがって、コンパイル時の
オプションに
-lutil
を加える必要がある。
2.0.92 より前のバージョンの glibc では、
openpty
()は BSD 疑似端末ペアのファイル・ディスクリプタを返す。
2.0.92 以降の glibc では、
openpty
()はまず Unix 98 疑似端末ペアをオープンしようとし、それに失敗した場合に
BSD 疑似端末ペアのオープンへと移行する。
準拠
これらは BSD の関数であり、libc5 と glibc2 に存在する。
バグ
誰も name に対してどのくらい大きさを予約しておけばいいか分からない。 したがって、NULL でない name を引き数として openpty ()や forkpty ()を呼び出すのは安全であるとは言えない。