Manpages

名 前

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) を 見 つ け て 、 マ ス タ と ス レ ー ブ の フ ァ イ ル デ ィ ス ク リ プ タ ー を amasteraslave に 入 れ て 返 す 。 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 に 返 さ れ る 。 termpwinp 引 き 数 は 、 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() を 呼 び 出 す の は 安 全 で あ る と は 言 え な い 。

関 連 項 目

fork(2), ttyname(3), pty(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。