名 前
ioctl_list − Linux/i386 カ ー ネ ル の ioctl の リ ス ト
説 明
こ の 文 章 は ioctl リ ス ト 1.3.27、 つ ま り Linux/i386 カ ー ネ ル 1.3.27 に お け る ioctl コ ー ル の 一 覧 で す 。 こ の リ ス ト は </usr/include/{asm,linux}/*.h> に あ る 421 の ioctl を 含 ん で い ま す 。 全 て の ioctl に 対 し て 、 数 値 、 名 称 、 引 き 数 の 型 を 列 挙 し て あ り ま す 。 引 き 数 型 const struct foo * は 、 そ の 引 き 数 が カ ー ネ ル へ の 入 力 で あ る 事 を 意 味 し ま す 。 ま た 、 struct foo * は 、 そ の 引 き 数 が カ ー ネ ル か ら の 出 力 で あ る 事 を 意 味 し ま す 。 カ ー ネ ル が そ の 引 き 数 を 入 力 と 出 力 の 両 方 に 使 用 す る 場 合 は 、 // I−O マ ー ク を 付 け て あ り ま す 。 い く つ か の ioctl は 複 数 の 構 造 体 の 引 き 数 を 必 要 と し た り 、 値 を 返 し た り し ま す 。 こ れ ら に は // MORE マ ー ク を 付 け て 、 さ ら に 分 離 し た セ ク シ ョ ン で 説 明 し て あ り ま す 。 こ の リ ス ト は 不 完 全 で す 。
ioctl
の 構 造
ioctl コ マ ン ド の 値
は 32 ビ ッ ト の 定
数 で す 。 原 則
と し て 、 こ れ
ら の 定 数 は 全
く 任 意 の も の
で す が 、 設 計
者 は 何 ら か の
構 造 を こ れ ら
の 定 数 に 組 み
込 も う と し て
い ま す 。 昔 の Linux
で は 、 大 部 分
は 16 ビ ッ ト の 定
数 で あ り 、 下
位 バ イ ト は シ
リ ア ル 番 号 で
、 上 位 バ イ ト
は ド ラ イ バ の
タ イ プ を 表 し
て い ま し た 。
メ ジ ャ ー 番 号
が 使 わ れ る こ
と も あ り ま し
た : 0x03 が HDIO_* ioctl, 0x06 が
LP* ioctl な ど で す
。 1 文 字 以 上 の
ASCII 文 字 列 が 使 わ
れ る こ と も あ
り ま し た 。 た
と え ば TCGETS の 値
は 0x00005401 で あ り 、 0x54
= 'T' で タ ー ミ ナ ル
ド ラ イ バ を 表
し ま す 。 CYGETTIMEOUT
の 値 は 0x00435906 で あ
り 、 0x43 0x59 = 'C' 'Y' で cyclades
ド ラ イ バ を 表
し ま す 。 後 の
時 代 (0.98p5) に な る
と 、 よ り 多 く
の 情 報 が 数 値
に 組 み 込 ま れ
る よ う に な り
ま し た 。 1 つ の
数 値 は 、 読 み
書 き の 方 向 を
表 す 2 ビ ッ ト (00: 読
み 書 き な し , 01: 書
き 込 み , 10: 読 み 込
み , 11: 読 み 込 み /書
き 込 み )、 (引 き
数 の サ イ ズ を
表 す ) 14 ビ ッ ト 、
(共 通 の 目 的 ま
た は 共 通 の ド
ラ イ バ で ioctl を グ
ル ー プ に す る
た め の ) 8 ビ ッ ト
の タ イ プ 、 8 ビ
ッ ト の シ リ ア
ル 番 号 か ら 構
成 さ れ ま す 。
こ の 構 造 を 記
述 す る マ ク ロ
は <asm/ioctl.h> に あ
り 、 _IO(type,nr) と
{_IOR,_IOW,_IOWR}(type,nr,size) で す
。 こ れ ら の マ
ク ロ は sizeof(size) を
使 う の で 、 こ
こ で size と い う 名
前 に し て い る
の は 間 違 っ て
い ま す : こ の 3 つ
目 の 引 き 数 は
デ ー タ タ イ プ
で す 。
size ビ ッ ト は 全 く 当 て に な ら な い 点 に 注 意 し て 下 さ い : 多 く の 場 合 、 間 違 っ て い ま す 。 こ れ は sizeof(sizeof(struct)) を 使 っ た バ グ を 含 ん だ マ ク ロ や 、 過 去 か ら 受 け 継 い だ 値 が 原 因 で す 。 し た が っ て 、 新 し い 構 造 は 不 都 合 な 点 し か な い よ う に 思 わ れ ま す : こ の 構 造 は チ ェ ッ ク の 手 助 け に は な ら ず 、 様 々 な ア ー キ テ ク チ ャ ー に よ っ て 値 を 変 化 さ せ て し ま い ま す 。
返 り 値
き ち ん と し た ioctl は 、 成 功 し た 場 合 は 0 を 返 し 、 エ ラ ー の 場 合 は −1 を 返 し ま す 。 ま た 出 力 値 は 引 き 数 に 格 納 し ま す 。 し か し 実 際 は 、 か な り 多 く の ioctl が 出 力 値 を 返 し ま す 。 こ れ は 今 の と こ ろ 以 下 で は 示 さ れ て い ま せ ん 。
// Main table.
// <include/asm−i386/socket.h>
// <include/asm−i386/termios.h>
// <include/linux/ax25.h>
// <include/linux/cdk.h>
// <include/linux/cdrom.h>
// <include/linux/cm206.h>
// <include/linux/cyclades.h>
// <include/linux/ext2_fs.h>
// <include/linux/fd.h>
// <include/linux/fs.h>
// <include/linux/hdreg.h>
// <include/linux/if_eql.h>
// <include/linux/if_plip.h>
// <include/linux/if_ppp.h>
// <include/linux/ipx.h>
// <include/linux/kd.h>
// <include/linux/lp.h>
// <include/linux/mroute.h>
// <include/linux/msdos_fs.h>
// <include/linux/mtio.h>
// <include/linux/netrom.h>
// <include/linux/sbpcd.h>
// <include/linux/scc.h>
// <include/linux/scsi.h>
// <include/linux/smb_fs.h>
// <include/linux/sockios.h>
// <include/linux/soundcard.h>
// <include/linux/umsdos_fs.h>
// <include/linux/vt.h>
// More arguments. い く つ か の ioctl は 追 加 の ポ イ ン タ ー を 含 む 構 造 体 へ の ポ イ ン タ ー を 使 用 し ま す 。 こ こ で こ れ ら を ア ル フ ァ ベ ッ ト 順 に 説 明 し ま す 。
CDROMREADAUDIO は 入 力 ポ イ ン タ ー const struct cdrom_read_audio * を 使 用 し ま す 。 buf フ ィ ー ル ド は 大 き さ nframes * CD_FRAMESIZE_RAW の 出 力 バ ッ フ ァ ー へ の ポ イ ン タ ー で す 。
CDROMREADCOOKED, CDROMREADMODE1, CDROMREADMODE2, CDROMREADRAW は 入 力 ポ イ ン タ ー const struct cdrom_msf * を 使 用 し ま す 。 こ れ ら は 同 じ ポ イ ン タ ー を char [] へ の 出 力 ポ イ ン タ ー と し て 使 用 し ま す 。 長 さ は 要 求 に よ っ て 変 化 し ま す 。 CDROMREADMODE1 に は 、 多 く の デ バ イ ス が CD_FRAMESIZE を 使 用 し ま す が 、 光 学 記 憶 装 置 (光 デ ィ ス ク ) の ド ラ イ バ は OPT_BLOCKSIZE を 使 用 し ま す (ど ち ら も 同 じ 値 で 2048 で す )。
CDROMREADCOOKED
char [CD_FRAMESIZE]
CDROMREADMODE1 char [CD_FRAMESIZE or OPT_BLOCKSIZE]
CDROMREADMODE2 char [CD_FRAMESIZE_RAW0]
CDROMREADRAW char [CD_FRAMESIZE_RAW]
EQL_ENSLAVE, EQL_EMANCIPATE, EQL_GETSLAVECFG, EQL_SETSLAVECFG, EQL_GETMASTERCFG, EQL_SETMASTERCFG は struct ifreq * を 使 用 し ま す 。 ifr_data フ ィ ー ル ド は 以 下 に 示 す 別 の 構 造 体 へ の ポ イ ン タ ー で す :
EQL_ENSLAVE
const struct slaving_request *
EQL_EMANCIPATE const struct slaving_request *
EQL_GETSLAVECFG struct slave_config * // I−O
EQL_SETSLAVECFG const struct slave_config *
EQL_GETMASTERCFG struct master_config *
EQL_SETMASTERCFG const struct master_config *
FDRAWCMD は struct floppy raw_cmd * を 使 用 し ま す 。 flags & FD_RAW_WRITE が ゼ ロ 以 外 の 場 合 、 data は 大 き さ length の 入 力 バ ッ フ ァ ー へ の ポ イ ン タ ー に な り ま す 。 flags & FD_RAW_READ が ゼ ロ 以 外 の 場 合 、 data は 大 き さ length の 出 力 バ ッ フ ァ ー へ の ポ イ ン タ ー に な り ま す 。
GIO_FONTX, PIO_FONTX は そ れ ぞ れ struct console_font_desc * と const struct console_font_desc * を 使 用 し ま す 。 chardata は char [charcount] バ ッ フ ァ ー へ の ポ イ ン タ ー で す 。 こ れ は GIO_FONTX の 出 力 バ ッ フ ァ ー と PIO_FONTX の 入 力 バ ッ フ ァ ー で す 。
GIO_UNIMAP, PIO_UNIMAP は そ れ ぞ れ struct unimapdesc * と const struct unimapdesc * を 使 用 し ま す 。 entries は struct unipair [entry_ct] バ ッ フ ァ ー へ の ポ イ ン タ ー で す 。 こ れ は GIO_UNIMAP の 出 力 バ ッ フ ァ ー と PIO_UNIMAP の 入 力 バ ッ フ ァ ー で す 。
KDADDIO, KDDELIO, KDDISABIO, KDENABIO は I/O ポ ー ト へ の ア ク セ ス を 可 能 /不 可 能 に し ま す 。 こ れ ら は 本 質 的 に 、 ’ioperm’ へ の 別 の イ ン タ ー フ ェ ー ス で す 。
KDMAPDISP, KDUNMAPDISP は メ モ リ ー マ ッ ピ ン グ や I/O ポ ー ト へ の ア ク セ ス を 可 能 /不 可 能 に し ま す 。 こ れ ら は カ ー ネ ル に 実 装 さ れ て い ま せ ん 。
SCSI_IOCTL_PROBE_HOST は 入 力 ポ イ ン タ ー const int * を 大 き さ と し て 使 用 し ま す 。 こ れ は 同 じ 大 き さ の char [] バ ッ フ ァ ー へ の 出 力 ポ イ ン タ ー と し て も 使 用 し ま す 。
SIOCADDRT, SIOCDELRT は 型 が 以 下 の プ ロ ト コ ル に 依 存 す る 入 力 ポ イ ン タ ー を 使 用 し ま す :
Most protocols
const struct rtentry *
AX.25 const struct ax25_route *
NET/ROM const struct nr_route_struct *
SIOCGIFCONF は struct ifconf * を 使 用 し ま す 。 こ の ifc_buf フ ィ ー ル ド は 長 さ ifc_len バ イ ト の バ ッ フ ァ ー へ の ポ イ ン タ ー で す 。 こ れ に カ ー ネ ル が struct ifreq [] 型 の リ ス ト へ 書 き 込 み ま す 。
SIOCSIFHWADDR は 型 が 以 下 の プ ロ ト コ ル に 依 存 す る 入 力 ポ イ ン タ ー を 使 用 し ま す :
Most protocols
const struct ifreq *
AX.25 const char [AX25_ADDR_LEN]
TIOCLINUX は const char * を 使 用 し ま す 。 こ の ポ イ ン タ ー を い く つ か の 独 立 し た サ ブ ク ラ ス を 識 別 す る 為 に 使 用 し ま す 。 以 下 の テ ー ブ ル の 中 で 、 N + foo は N バ イ ト の 詰 め も の の 後 に あ る foo を 意 味 し ま す 。 struct selection は 暗 黙 的 に drivers/char/selection.c の 中 で 定 義 さ れ て い ま す 。
TIOCLINUX−2
1 + const struct selection *
TIOCLINUX−3 void
TIOCLINUX−4 void
TIOCLINUX−5 4 + const struct { long [8]; } *
TIOCLINUX−6 char *
TIOCLINUX−7 char *
TIOCLINUX−10 1 + const char *
// Duplicate ioctls こ の リ ス ト は SIOCDEVPRIVATE か ら SIOCPROTOPRIVATE の 範 囲 の ioctl を 含 ん で い ま せ ん 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。