名 前
openpty, login_tty, forkpty − 端 末 ユ ー テ ィ リ テ ィ 関 数
書 式
#include <pty.h>
int
openpty(int *amaster, int
*aslave, char *name,
const struct termios *termp,
const struct winsize *winp);
pid_t
forkpty(int *amaster, char
*name,
const struct termios *termp,
const struct winsize *winp);
#include <utmp.h>
int login_tty(int fd);
−lutil で リ ン ク す る 。
説 明
openpty() 関 数 は 、 使 用 可 能 な 疑 似 端 末 (pseudoterminal) を 見 つ け て 、 マ ス タ と ス レ ー ブ の フ ァ イ ル デ ィ ス ク リ プ タ ー を amaster と aslave に 入 れ て 返 す 。 name が NULL で な い 場 合 、 ス レ ー ブ の フ ァ イ ル 名 が name に 返 さ れ る 。 termp が NULL で な い 場 合 、 ス レ ー ブ の 端 末 パ ラ メ ー タ ー は termp の 値 に 設 定 さ れ る 。 winp が NULL で な い 場 合 、 ス レ ー ブ の ウ イ ン ド ウ サ イ ズ は winp に 設 定 さ れ る 。
login_tty() 関 数 は 、 端 末 fd に ロ グ イ ン す る 準 備 を す る (fd は 実 際 の 端 末 デ バ イ ス で も 、 openpty() で 返 さ れ る 疑 似 端 末 の ス レ ー ブ で も よ い )。 具 体 的 に は 、 新 し い セ ッ シ ョ ン を 作 成 し 、 fd を 呼 び 出 し 元 の プ ロ セ ス の 制 御 端 末 と し 、 呼 び 出 し 元 の 標 準 入 力 ・ 標 準 出 力 ・ 標 準 エ ラ ー の ス ト リ ー ム を fd に 設 定 し た 後 、 fd を ク ロ ー ズ す る 。
forkpty() 関 数 は openpty(), fork(2), 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(2) が fd を 呼 び 出 し 元 の プ ロ セ ス の 制 御 端 末 に 設 定 す る の に 失 敗 し た 場 合 、 login_tty() は 失 敗 す る 。
openpty() ま た は fork(2) の ど ち ら か が 失 敗 し た 場 合 、 forkpty() は 失 敗 す る 。
準 拠
こ れ ら は BSD の 関 数 で あ り 、 glibc2 に 存 在 す る 。 POSIX で の 標 準 化 は さ れ て い な い 。
注 意
glibc 2.8 で 、 openpty() と forkpty() の 構 造 体 へ の ポ イ ン タ ー の 引 き 数 に const 修 飾 子 が 追 加 さ れ た 。
2.0.92 よ り 前 の バ ー ジ ョ ン の glibc で は 、 openpty() は BSD 疑 似 端 末 ペ ア の フ ァ イ ル デ ィ ス ク リ プ タ ー を 返 す 。 2.0.92 以 降 の glibc で は 、 openpty() は ま ず Unix 98 疑 似 端 末 ペ ア を オ ー プ ン し よ う と し 、 そ れ に 失 敗 し た 場 合 に BSD 疑 似 端 末 ペ ア の オ ー プ ン へ と 移 行 す る 。
バ グ
誰 も name に 対 し て ど の く ら い 大 き さ を 予 約 し て お け ば い い か 分 か ら な い 。 し た が っ て 、 NULL で な い name を 引 き 数 と し て openpty() や forkpty() を 呼 び 出 す の は 安 全 で あ る と は 言 え な い 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。