Manpages

名 前

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 指 定 さ れ た 端 末 が 呼 び 出 し 元 の プ ロ セ ス の 制 御 端 末 で あ る 場 合 、 こ の 制 御 端 末 を 放 棄 す る 。 プ ロ セ ス が セ ッ シ ョ ン リ ー ダ の 場 合 、 フ ォ ア グ ラ ウ ン ド プ ロ セ ス グ ル ー プ に SIGHUPSIGCONT を 送 り 、 カ レ ン ト セ ッ シ ョ ン の 全 て の プ ロ セ ス は 制 御 端 末 を 失 う 。 グ ル ー プ 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/ に 書 か れ て い る 。