名 前
pty − 擬 似 端 末 イ ン タ ー フ ェ ー ス
説 明
擬 似 端 末 (pseudoterminal; "pty" と 略 さ れ る こ と も あ る ) は 、 双 方 向 通 信 チ ャ ン ネ ル を 提 供 す る 仮 想 キ ャ ラ ク タ ー デ バ イ ス の ペ ア で あ る 。 チ ャ ン ネ ル の 一 方 の 端 点 は マ ス タ (master) と 呼 ば れ 、 も う 一 方 の 端 点 は ス レ ー ブ (slave) と 呼 ば れ る 。 擬 似 端 末 の ス レ ー ブ は 、 伝 統 的 な 端 末 と 全 く 同 じ 動 作 を す る イ ン タ ー フ ェ ー ス を 提 供 す る 。 端 末 に 接 続 さ れ る こ と を 想 定 し て い る プ ロ セ ス は 擬 似 端 末 の ス レ ー ブ を オ ー プ ン す る こ と が で き 、 そ れ 以 降 は マ ス タ 側 を オ ー プ ン し て い る プ ロ グ ラ ム か ら そ の プ ロ セ ス を 制 御 す る こ と が で き る 。 端 末 で 入 力 さ れ た の と 同 じ よ う に 、 マ ス タ 側 に 書 き 込 ま れ た 全 て の デ ー タ は 、 ス レ ー ブ 側 の プ ロ セ ス に 送 ら れ る 。 例 え ば 、 マ ス タ デ バ イ ス に 割 り 込 み キ ャ ラ ク タ ー (通 常 は control−C) を 書 き 込 む と 、 ス レ ー ブ に 接 続 さ れ て い る フ ォ ア グ ラ ウ ン ド プ ロ セ ス グ ル ー プ に 対 し て 割 り 込 み シ グ ナ ル (SIGINT) が 生 成 さ れ る 。 反 対 に 、 擬 似 端 末 の ス レ ー ブ 側 に 書 き 込 ま れ た 全 て の デ ー タ は 、 マ ス タ 側 に 接 続 さ れ て い る プ ロ セ ス か ら 読 み 出 す こ と が で き る 。 擬 似 端 末 は 、 ネ ッ ト ワ ー ク ロ グ イ ン サ ー ビ ス (ssh(1), rlogin(1), telnet(1)) や 端 末 エ ミ ュ レ ー タ 、 script(1), screen(1), expect(1) な ど の ア プ リ ケ ー シ ョ ン で 使 用 さ れ て い る 。 歴 史 的 に 見 る と BSD と System V の 2種 類 の 擬 似 端 末 の API が 発 展 し て き て い る 。 SUSv1 は System V API に 基 づ い た 擬 似 端 末 API を 標 準 化 し て お り 、 擬 似 端 末 を 使 用 す る 新 し い プ ロ グ ラ ム は す べ て こ の API を 採 用 す べ き で あ る 。
Linux で は BSD 風 と (標 準 化 さ れ た ) System V 風 の 擬 似 端 末 を 提 供 し て い る 。 System V 風 の 端 末 は 、 Linux シ ス テ ム で は 一 般 に UNIX 98 擬 似 端 末 と 呼 ば れ て い る 。 カ ー ネ ル 2.6.4 以 降 で は 、 BSD 風 の 擬 似 端 末 は 廃 止 予 定 と み な さ れ て い る (カ ー ネ ル の コ ン フ ィ ギ ュ レ ー シ ョ ン で BSD 風 の 擬 似 端 末 を 無 効 に す る こ と が で き る )。 新 し い ア プ リ ケ ー シ ョ ン で は 、 UNIX 98 擬 似 端 末 を 使 用 す べ き で あ る 。
UNIX 98 擬 似 端 末 未 使 用 の UNIX 98 擬 似 端 末 マ ス タ を オ ー プ ン す る に は posix_openpt(3) を 呼 び 出 す (こ の 関 数 は マ ス タ ク ロ ー ン デ バ イ ス (master clone device), /dev/ptmx を オ ー プ ン す る ; pts(4) を 参 照 )。 プ ロ グ ラ ム 固 有 の 初 期 化 処 理 を 実 行 し 、 grantpt(3) を 使 っ て ス レ ー ブ デ バ イ ス の 所 有 権 や 許 可 を 変 更 し 、 unlockpt(3) を 使 っ て ス レ ー ブ の ロ ッ ク 解 除 を 行 う と 、 ptsname(3) が 返 す 名 前 を 渡 し て open(2) を 呼 び 出 す こ と に よ り 対 応 す る ス レ ー ブ デ バ イ ス を オ ー プ ン で き る よ う に な る 。
Linux カ ー ネ ル で は 、 利 用 で き る UNIX 98 擬 似 端 末 の 数 に 上 限 を 設 け て い る 。 2.6.3 以 前 の カ ー ネ ル で は 、 こ の 上 限 は カ ー ネ ル の コ ン パ イ ル 時 の 設 定 (CONFIG_UNIX98_PTYS) で あ る 。 許 可 さ れ る 擬 似 端 末 の 数 は 最 大 2048 で あ り 、 デ フ ォ ル ト の 設 定 は 256 で あ る 。 カ ー ネ ル 2.6.4 以 降 で は 、 こ の 上 限 は /proc/sys/kernel/pty/max 経 由 で 動 的 に 調 整 可 能 と な っ て い る 。 ま た 、 /proc/sys/kernel/pty/nr で 現 在 使 用 中 の 擬 似 端 末 の 数 を 取 得 で き る 。 こ の 2つ の フ ァ イ ル の 詳 細 は proc(5) を 参 照 。
BSD 擬
似 端 末
BSD 風 の 擬 似 端 末
は あ ら か じ め
作 成 さ れ た ペ
ア と し て 提 供
さ れ る 。 そ の
名 前 は /dev/ptyXY (マ
ス タ 側 )、 /dev/ttyXY
(ス レ ー ブ 側 ) で
あ る 。 こ こ で
、 X は [p−za−e] の 16文
字 の う ち の 一
文 字 、 Y は [0−9a−f]
の 16文 字 の う ち
の 一 文 字 で あ
る (X, Y に 使 わ れ る
文 字 の 正 確 な
範 囲 は UNIX の 実 装
に よ り 異 な る
)。 例 え ば 、
/dev/ptyp1 と /dev/ttyp1 は BSD
擬 似 端 末 ペ ア
を 構 成 す る 。
プ ロ セ ス が 未
使 用 の 擬 似 端
末 ペ ア を 見 つ
け る に は 、 各
擬 似 端 末 の マ
ス タ の open(2) を 試
み 、 open が 成 功 す
る ま で こ れ を
繰 り 返 す 。 マ
ス タ を open す る と
、 対 応 す る 擬
似 端 末 の ス レ
ー ブ も open で き る
よ う に な る (ス
レ ー ブ の 名 前
は 、 マ ス タ の
名 前 の "pty" を
"tty" に 置 き 換 え
た も の で あ る
)。
フ ァ イ ル
/dev/ptmx
(UNIX 98 マ ス タ ク ロ
ー ン デ バ イ ス )
/dev/pts/* (UNIX 98 ス レ ー ブ
デ バ イ ス )
/dev/pty[p−za−e][0−9a−f] (BSD
マ ス タ デ バ イ
ス )
/dev/tty[p−za−e][0−9a−f] (BSD
ス レ ー ブ デ バ
イ ス )
注 意
パ ケ ッ ト モ ー ド 操 作 の 制 御 を 行 う TIOCPKT ioctl(2) の 説 明 は tty_ioctl(4) に 書 か れ て い る 。
BSD ioctl(2) の TIOCSTOP, TIOCSTART, TIOCUCNTL, TIOCREMOTE は こ れ ま で の と こ ろ Linux で は 実 装 さ れ て い な い 。
関 連 項 目
select(2), setsid(2), forkpty(3), openpty(3), termios(3), pts(4), tty(4), tty_ioctl(4)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。