Manpages

名 前

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_SETMASTERCFGstruct 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 *

FDRAWCMDstruct 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 * を 使 用 し ま す 。 chardatachar [charcount] バ ッ フ ァ ー へ の ポ イ ン タ ー で す 。 こ れ は GIO_FONTX の 出 力 バ ッ フ ァ ー と PIO_FONTX の 入 力 バ ッ フ ァ ー で す 。

GIO_UNIMAP, PIO_UNIMAP は そ れ ぞ れ struct unimapdesc *const struct unimapdesc * を 使 用 し ま す 。 entriesstruct 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 *

SIOCGIFCONFstruct ifconf * を 使 用 し ま す 。 こ の ifc_buf フ ィ ー ル ド は 長 さ ifc_len バ イ ト の バ ッ フ ァ ー へ の ポ イ ン タ ー で す 。 こ れ に カ ー ネ ル が struct ifreq [] 型 の リ ス ト へ 書 き 込 み ま す 。

SIOCSIFHWADDR は 型 が 以 下 の プ ロ ト コ ル に 依 存 す る 入 力 ポ イ ン タ ー を 使 用 し ま す :

Most protocols const struct ifreq *
AX.25 const char [AX25_ADDR_LEN]

TIOCLINUXconst 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 を 含 ん で い ま せ ん 。

関 連 項 目

ioctl(2)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。