名 前
tty_ioctl − 端 末 と シ リ ア ル ラ イ ン の ioctl (入 出 力 制 御 )
書 式
#include <termios.h>
int ioctl(int fd, int cmd, ...);
説 明
端 末 と シ リ ア ル ポ ー ト に つ い て の ioctl(2) コ ー ル は 、 多 く の コ マ ン ド 引 き 数 を 受 け 付 け る 。 多 く が い ろ い ろ な 型 の 3 番 目 の 引 き 数 を 必 要 と す る 。 こ こ で は argp ま た は arg と 呼 ぶ 。
ioctl を 使 用 す る と 移 植 性 の な い プ ロ グ ラ ム に な る 。 可 能 な 場 合 は 、 termios(3) に 記 述 さ れ て い る POSIX イ ン タ ー フ ェ ー ス を 使 う こ と 。 端 末 属 性 の 取 得 と 設 定
TCGETS |
struct termios *argp |
tcgetattr(fd, argp) と 同 じ 。 現 在 の シ リ ア ル ポ ー ト の 設 定 を 取 得 す る 。
TCSETS |
const struct termios *argp |
tcsetattr(fd, TCSANOW, argp) と 同 じ 。 現 在 の シ リ ア ル ポ ー ト の 設 定 を 変 更 す る 。
TCSETSW |
const struct termios *argp |
tcsetattr(fd, TCSADRAIN, argp) と 同 じ 。 排 出 (drain) を 行 う た め の 出 力 バ ッ フ ァ ー の 使 用 を 許 可 し 、 現 在 の シ リ ア ル ポ ー ト の 設 定 を 変 更 す る 。
TCSETSF |
const struct termios *argp |
tcsetattr(fd, TCSAFLUSH, argp) と 同 じ 。 排 出 (drain) を 行 う た め の 出 力 バ ッ フ ァ ー の 使 用 を 許 可 し 、 処 理 し て い な い 入 力 を 破 棄 し て 、 現 在 の シ リ ア ル ポ ー ト の 設 定 を 変 更 す る 。 以 下 の 4 つ の ioctl は TCGETS, TCSETS, TCSETSW, TCSETSF と 似 て い る 。 た だ し 、 struct termios * の 代 わ り に struct termio * を 取 る 。
TCGETA |
struct termio *argp | |||
TCSETA |
const struct termio *argp | |||
TCSETAW |
const struct termio *argp | |||
TCSETAF |
const struct termio *argp |
termios 構 造 体 の ロ ッ ク 端 末 の termios 構 造 体 は ロ ッ ク す る こ と が 可 能 で あ る 。 こ の ロ ッ ク 自 体 は termios 構 造 体 で あ り 、 0 で な い ビ ッ ト ま た は フ ィ ー ル ド は ロ ッ ク さ れ た 値 を 示 す 。
TIOCGLCKTRMIOS |
struct termios *argp 端 末 の termios 構 造 体 の ロ ッ ク 状 態 を 取 得 す る 。 | |||
TIOCSLCKTRMIOS |
const struct termios *argp 端 末 の termios 構 造 体 の ロ ッ ク 状 態 を 設 定 す る 。 CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ を 持 つ プ ロ セ ス だ け が こ れ を 実 行 で き る 。 ウ ィ ン ド ウ サ イ ズ の 取 得 と 設 定 ウ ィ ン ド ウ サ イ ズ は カ ー ネ ル 内 に 保 持 さ れ る が 、 カ ー ネ ル に よ っ て 使 用 さ れ な い (仮 想 コ ン ソ ー ル の 場 合 は 例 外 で あ り 、 新 し い フ ォ ン ト を 読 み 込 ん だ 場 合 な ど 、 仮 想 端 末 の サ イ ズ が 変 更 さ れ た 場 合 、 カ ー ネ ル は ウ ィ ン ド ウ サ イ ズ を 更 新 す る )。 以 下 の 定 数 と 構 造 体 は <sys/ioctl.h> で 定 義 さ れ て い る 。 | |||
TIOCGWINSZ |
struct winsize *argp ウ ィ ン ド ウ サ イ ズ を 取 得 す る 。 | |||
TIOCSWINSZ |
const struct winsize *argp ウ ィ ン ド ウ サ イ ズ を 設 定 す る 。 こ れ ら の ioctl で 使 用 さ れ る 構 造 体 は 、 以 下 の よ う に 定 義 さ れ る 。 |
struct winsize
{
unsigned short ws_row;
unsigned short ws_col;
unsigned short ws_xpixel; /* 未 使 用 */
unsigned short ws_ypixel; /* 未 使 用 */
}; ウ ィ ン ド ウ サ
イ ズ が 変 更 さ
れ た 場 合 、 フ
ォ ア グ ラ ウ ン
ド プ ロ セ ス グ
ル ー プ に SIGWINCH シ
グ ナ ル が 送 ら
れ る 。
break の 送 信
TCSBRK |
int arg |
tcsendbreak(fd, arg) と 同 じ 。 端 末 が 非 同 期 シ リ ア ル デ ー タ 転 送 を 使 用 し て お り 、 arg が 0 の 場 合 、 0.25 か ら 0.5 秒 の 間 に break (0 の ビ ッ ト 列 の ス ト リ ー ム ) が 送 信 さ れ る 。 端 末 が 非 同 期 シ リ ア ル デ ー タ 転 送 を 使 用 し て い る 場 合 、 break が 送 信 さ れ る か 、 こ の 関 数 は 何 も せ ず に 返 る 。 arg が 0 以 外 の 場 合 、 何 が 起 こ る か 分 か ら な い 。
(SVr4, UnixWare, Solaris, Linux は 、 tcsendbreak(fd,arg) の arg が 0 以 外 の 場 合 、 tcdrain(fd) の よ う に 扱 う 。 SunOS は arg を 倍 数 と し て 扱 い 、 ビ ッ ト の ス ト リ ー ム を arg 回 送 信 す る 。 arg が 0 の 場 合 も 同 じ 。 DG/UX と AIX は 、 (0 以 外 の 場 合 ) arg を ミ リ 秒 単 位 の 時 間 間 隔 と し て 扱 う 。 HP−UX は arg を 無 視 す る 。 )
TCSBRKP |
int arg い わ ゆ る 「 POSIX 版 」 の TCSBRK で あ る 。 こ れ は 0 以 外 の arg を 1/10 秒 単 位 の 時 間 間 隔 と し て 扱 う 。 ま た ド ラ イ バ が break を サ ポ ー ト し て い な い 場 合 は 、 何 も し な い 。 | |||
TIOCSBRK |
void |
break を オ ン に す る 。 つ ま り 0 の ビ ッ ト 列 の 送 信 を 開 始 す る 。
TIOCCBRK |
void |
break を オ フ に す る 。 つ ま り 0 の ビ ッ ト 列 の 送 信 を 停 止 す る 。 ソ フ ト ウ ェ ア フ ロ ー 制 御
TCXONC |
int arg |
tcflow(fd, arg) と
同 じ 。
tcflow(3) の 引 き 数
TCOOFF, TCOON, TCIOFF, TCION
を 参 照 す る こ
と 。 バ ッ フ ァ
ー の カ ウ ン ト
と 書 き 出 し (flush)
FIONREAD |
int *argp 入 力 バ ッ フ ァ ー に あ る バ イ ト 数 を 取 得 す る 。 | |||
TIOCINQ |
int *argp |
FIONREAD と 同 じ 。
TIOCOUTQ |
int *argp 出 力 バ ッ フ ァ ー に あ る バ イ ト 数 を 取 得 す る 。 | |||
TCFLSH |
int arg |
tcflush(fd, arg)
と 同 じ 。
tcflush(3) の 引 き 数
TCIFLUSH, TCOFLUSH, TCIOFLUSH を
参 照 す る こ と
。 入 力 の 偽
装
TIOCSTI |
const char *argp 指 定 さ れ た バ イ ト を 入 力 キ ュ ー に 挿 入 す る 。 コ ン ソ ー ル 出 力 の リ ダ イ レ ク ト | |||
TIOCCONS |
void |
/dev/console ま た は /dev/tty0 に 送 ら れ る 出 力 を 、 指 定 さ れ た 端 末 リ ダ イ レ ク ト す る 。 指 定 さ れ た 端 末 が 疑 似 端 末 (pseudoterminal) の マ ス タ の 場 合 、 出 力 は ス レ ー ブ に 送 ら れ る 。 バ ー ジ ョ ン 2.6.10 よ り 前 の Linux で は 、 出 力 が ま だ リ ダ イ レ ク ト さ れ て い な け れ ば 、 誰 で も リ ダ イ レ ク ト を 行 う こ と が で き る 。 バ ー ジ ョ ン 2.6.10 以 降 で は 、 CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ を 持 つ プ ロ セ ス だ け が リ ダ イ レ ク ト を 行 う こ と が で き る 。 出 力 が す で に リ ダ イ レ ク ト さ れ て い る 場 合 は EBUSY が 返 さ れ る が 、 /dev/console か /dev/tty0 を 指 し て い る fd に 対 し て こ の ioctl を 使 用 す る こ と で 、 リ ダ イ レ ク ト を 止 め る こ と が で き る 。 端 末 の 制 御
TIOCSCTTY |
int arg 指 定 さ れ た 端 末 を 呼 び 出 し 元 の プ ロ セ ス の 制 御 端 末 に す る 。 呼 び 出 し 元 の プ ロ セ ス は セ ッ シ ョ ン リ ー ダ で な け れ ば な ら ず 、 か つ 既 に 制 御 端 末 を 持 っ て い て は な ら な い 。 こ の 場 合 arg に は 0 を 指 定 す べ き で あ る 。 こ の 端 末 が 既 に 他 の セ ッ シ ョ ン グ ル ー プ の 制 御 端 末 で あ る 場 合 、 ioctl は EPERM で 失 敗 す る 。 た だ し 呼 び 出 し た ユ ー ザ ー が CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ を 持 っ て い て 、 か つ arg が 1 で あ る 場 合 を 除 く 。 こ の 場 合 、 端 末 は 盗 ま れ (stolen)、 こ の 端 末 を 制 御 端 末 と し て い た 全 て の プ ロ セ ス は 端 末 を 失 う 。 | |||
TIOCNOTTY |
void 指 定 さ れ た 端 末 が 呼 び 出 し 元 の プ ロ セ ス の 制 御 端 末 で あ る 場 合 、 こ の 制 御 端 末 を 放 棄 す る 。 プ ロ セ ス が セ ッ シ ョ ン リ ー ダ の 場 合 、 フ ォ ア グ ラ ウ ン ド プ ロ セ ス グ ル ー プ に SIGHUP と SIGCONT を 送 り 、 カ レ ン ト セ ッ シ ョ ン の 全 て の プ ロ セ ス は 制 御 端 末 を 失 う 。 グ ル ー プ ID と セ ッ シ ョ ン ID の 処 理 | |||
TIOCGPGRP |
pid_t *argp 成 功 し た 場 合 、 *argp = tcgetpgrp(fd) と 同 じ 。 こ の 端 末 上 の フ ォ ア グ ラ ウ ン ド プ ロ セ ス の プ ロ セ ス グ ル ー プ ID を 取 得 す る 。 | |||
TIOCSPGRP |
const pid_t *argp |
tcsetpgrp(fd, *argp) と 同 じ 。 こ の 端 末 の フ ォ ア グ ラ ウ ン ド プ ロ セ ス の グ ル ー プ ID を 設 定 す る 。
TIOCGSID |
pid_t *argp 指 定 さ れ た 端 末 の セ ッ シ ョ ン ID を 取 得 す る 。 端 末 が マ ス タ 疑 似 端 末 ま た は 制 御 端 末 で な い 場 合 は 、 ENOTTY で 失 敗 す る 。 奇 妙 だ 。 排 他 モ ー ド | |||
TIOCEXCL |
void 端 末 を 排 他 モ ー ド に す る 。 端 末 に 対 し て 、 こ れ 以 降 の open(2) 操 作 を 禁 止 す る 。 (CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ を 持 た な い プ ロ セ ス の 場 合 、 こ れ 以 降 の open(2) は EBUSY で 失 敗 す る 。 ) | |||
TIOCNXCL |
void 排 他 モ ー ド を 無 効 に す る 。 ラ イ ン 制 御 (line discipline) | |||
TIOCGETD |
int *argp 端 末 の ラ イ ン 制 御 の 情 報 を 取 得 す る 。 | |||
TIOCSETD |
const int *argp 端 末 の ラ イ ン 制 御 の 情 報 を 設 定 す る 。 疑 似 端 末 の ioctl | |||
TIOCPKT |
const int *argp パ ケ ッ ト モ ー ド を 有 効 (*argp が 0 以 外 の 場 合 ) ま た は 無 効 に す る 。 疑 似 端 末 の マ ス タ 側 に の み 適 用 で き る (そ れ 以 外 の 場 合 は ENOTTY を 返 す )。 パ ケ ッ ト モ ー ド で は 、 そ の 後 に 実 行 さ れ る read(2) は 、 値 が 0 以 外 の 1 つ の 制 御 バ イ ト を 含 む パ ケ ッ ト か 、 値 が 0 の 1 バ イ ト ('\0') に 疑 似 端 末 の ス レ ー ブ 側 で 書 き 込 ま れ た デ ー タ が 続 く パ ケ ッ ト を 返 す 。 最 初 の バ イ ト が TIOCPKT_DATA (0) で な い 場 合 、 以 下 の ビ ッ ト の 1 つ 以 上 を OR し た も の で あ る : |
TIOCPKT_FLUSHREAD
端 末 の 読 み 込
み キ ュ ー が フ
ラ ッ シ ュ (flush) さ
れ る 。
TIOCPKT_FLUSHWRITE 端 末 の 書
き 出 し キ ュ ー
が フ ラ ッ シ ュ
さ れ る 。
TIOCPKT_STOP 端 末 へ の 出
力 が 停 止 さ れ
る 。
TIOCPKT_START 端 末 へ の 出
力 が 再 開 さ れ
る 。
TIOCPKT_DOSTOP 開 始 文 字 と
終 了 文 字 が
^S/^Q で あ る 。
TIOCPKT_NOSTOP 開 始 文 字 と
終 了 文 字 が
^S/^Q で な い 。
こ の モ ー ド が
使 わ れ て い る
場 合 、 制 御 状
態 情 報 の 存 在
が マ ス タ 側 か
ら 読 み 込 め る
か は 、 例 外 的
な 条 件 で select(2)
を 使 う こ と に
よ り 知 る こ と
が で き る 。 こ
の モ ー ド は
rlogin(1) と rlogind(8) で
使 わ れ 、 リ モ
ー ト エ コ ー の
リ モ ー ト ロ グ
イ ン と ロ ー カ
ル で の ^S/^Q フ
ロ ー 制 御 の リ
モ ー ト ロ グ イ
ン を 実 装 し て
い る 。
BSD の ioctl で あ る TIOCSTOP, TIOCSTART, TIOCUCNTL, TIOCREMOTE は 、 Linux で は 実 装 さ れ て い な い 。 モ デ ム 制 御
TIOCMGET |
int *argp モ デ ム ビ ッ ト 列 の 状 態 を 取 得 す る 。 | |||
TIOCMSET |
const int *argp モ デ ム ビ ッ ト 列 の 状 態 を 設 定 す る 。 | |||
TIOCMBIC |
const int *argp 指 定 さ れ た モ デ ム ビ ッ ト 列 を ク リ ア す る 。 | |||
TIOCMBIS |
const int *argp 指 定 さ れ た モ デ ム ビ ッ ト 列 を 設 定 す る 。 こ れ ら の 4 つ の ioctl で 使 わ れ る ビ ッ ト は 以 下 の 通 り : |
TIOCM_LE DSR
(data set ready/line enable)
TIOCM_DTR DTR (data terminal ready)
TIOCM_RTS RTS (request to send)
TIOCM_ST Secondary TXD (transmit)
TIOCM_SR Secondary RXD (receive)
TIOCM_CTS CTS (clear to send)
TIOCM_CAR DCD (data carrier detect)
TIOCM_CD TIOCM_CAR を 参 照 。
TIOCM_RNG RNG (ring)
TIOCM_RI TIOCM_RNG を 参 照 。
TIOCM_DSR DSR (data set ready) 回 線 を
ロ ー カ ル と し
て マ ー ク す
る
TIOCGSOFTCAR |
int *argp |
("ソ フ ト ウ ェ ア キ ャ リ ア フ ラ グ の 取 得 ") termios 構 造 体 の c_cflag フ ィ ー ル ド の CLOCAL フ ラ グ の 状 態 を 取 得 す る 。
TIOCSSOFTCAR |
const int *argp |
("ソ フ ト ウ ェ ア キ ャ リ ア フ ラ グ の 設 定 ") *argp が 0 以 外 の 場 合 、 termios 構 造 体 の CLOCAL フ ラ グ を 設 定 す る 。 0 の 場 合 は ク リ ア す る 。 ラ イ ン の CLOCAL フ ラ グ が オ フ の 場 合 、 ハ ー ド ウ ェ ア キ ャ リ ア 検 出 (hardware carrier detect, DCD) シ グ ナ ル が 重 要 で あ り 、 O_NONBLOCK フ ラ グ が 指 定 さ れ な い 限 り 、 対 応 す る 端 末 の open(2) は DCD が 示 さ れ る ま で ブ ロ ッ ク さ れ る 。 CLOCAL が 設 定 さ れ て い る 場 合 、 ラ イ ン は 常 に DCD が 示 さ れ て い る か の よ う に 動 作 す る 。 ソ フ ト ウ ェ ア キ ャ リ ア フ ラ グ は 、 ロ ー カ ル デ バ イ ス で は 通 常 は オ ン に な っ て お り 、 モ デ ム の ラ イ ン で は オ フ に な っ て い る 。
Linux
固 有 の ioctl
TIOCLINUX ioctl に つ い て
は 、 console_ioctl(4) を 参
照 す る こ と 。
カ ー ネ ル デ バ
ッ ギ ン グ
#include <linux/tty.h>
TIOCTTYGSTRUCT |
struct tty_struct *argp |
fd に 対 応 す る tty_struct を 取 得 す る 。
返 り 値
ioctl(2) シ ス テ ム コ ー ル は 、 成 功 し た 場 合 は 0 を 返 す 。 エ ラ ー の 場 合 は −1 を 返 し 、 errno を 適 切 に 設 定 す る 。
エ ラ ー
EINVAL 不 正 な コ マ ン ド 引 き 数 で あ る 。 |
ENOIOCTLCMD 不 明 な コ マ ン ド で あ る 。
ENOTTY |
fd が 不 適 切 で あ る 。 |
|||
EPERM |
権 限 が 不 足 し て い る 。
例シ リ ア ル ポ ー ト の DTR の 状 態 を チ ェ ッ ク す る 。 |
#include
<termios.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int
main(void)
{
int fd, serial;
fd =
open("/dev/ttyS0", O_RDONLY);
ioctl(fd, TIOCMGET, &serial);
if (serial & TIOCM_DTR)
puts("TIOCM_DTR が 設 定 さ
れ て い な い 。
");
else
puts("TIOCM_DTR が 設 定 さ
れ て い る 。 ");
close(fd); }
関 連 項 目
ioctl(2), termios(3), console_ioctl(4), pty(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。