Manpages

名 前

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/ に 書 か れ て い る 。