Chinaunix首页 | 论坛 | 博客
  • 博客访问: 438997
  • 博文数量: 88
  • 博客积分: 2677
  • 博客等级: 少校
  • 技术积分: 893
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-13 08:01
文章分类

全部博文(88)

文章存档

2017年(3)

2016年(1)

2012年(4)

2011年(4)

2010年(57)

2009年(19)

我的朋友

分类: LINUX

2009-07-11 17:06:59

IOCTL

Section: Linux Programmer's Manual (2)
Updated: 2000-09-21

名前

ioctl - デバイス (device) を制御する

書式

#include <>

int ioctl(int d, int request, ...);

説明

ioctl() 関数はスペシャル・ファイルを構成するデバイスのパラメータを操作する。
ioctl() 函数对由特殊文件构成的Device的属性的参数进行操作。
特に、キャラクタ型のスペシャル・ファイル(例えば端末(terminal)) の多くの操作可能な特性を ioctl() リクエストによって制御することができる。
特别是,能够根据ioctl() Request处理字符型的特殊文件(例如(terminal)) 的许多的操作可能特性。
引き数 d はオープンされたファイル・ディスクリプタでなければならない。
参数 d 必须是已被OPEN的文件描述符。

2番目の引き数は、デバイス依存のリクエスト・コードである。
第2个参数是依赖于Device的RequestCode。

3番目の引き数は、メモリへの型を指定しないポインタである。
第3个参数是不指定Memory类型的指针。
この引き数は伝統的に(C で void * が有効になる前から) char *argp と表記されている。
这个参数,通常(C中void * 是有效的前提下)被表示为char *argp
したがって、この文章でもそのように名付けることとする。
因此,本文使用那样的命名方式。

ioctl() request には、以下の情報をバイト数でエンコードする:
ioctl() request 中,用字节形式编码下列信息。
(1)引き数が 入力 パラメータか 出力 パラメータのどちらかであるか、
(1)参数是输入参数还是输出参数?
(2) argp の大きさ。 ioctl() request を指定するためのマクロ(macro)と定義は <> ファイルにある。 
(2) argp 的大小。为了指定ioctl() request 的宏,在<>文件中定义。

返り値

ioctl() requests use the return value as an output parameter たいていの場合、成功した場合はゼロが返される。
いくつかの ioctl() 要求では出力パラメータとして返り値を使用していたり、成功した場合に非 0 の値を返したりする。

エラーの場合は -1 が返され、
errno が適切に設定される。

エラー

EBADF
d が有効なディスクリプタではない。
EFAULT
argp がアクセス不可能なメモリを参照している。
EINVAL
request または argp が不正である。
ENOTTY
d がキャラクタ型のスペシャル・デバイスを参照していない。
ENOTTY
指定されたリクエストはディスクリプタ d が参照する種類のオブジェクトには適用することができない。

準拠

どれか一つの標準に対応しているわけではない。 ioctl() の引き数、返り値、解釈は、処理対象のデバイス・ドライバごとに異なる(この関数は Unix の ストリーム I/O モデル に明らかに適合しない様々な操作に使用される)。よく知られている ioctl() のリストについては (2) を参照すること。 ioctl() 関数コールは Version 7 AT&T Unix で登場した。

注意

このシステムコールを使うには、オープンされたファイル・ディスクリプタが必要である。しばしば (2) コールは望んでいない副作用を伴うことがあるが、Linux では (2) に O_NONBLOCK フラグをつけることでこの副作用を避けることができる。

関連項目

(2), (2), (2), (2), (4), (4)


Index

阅读(1019) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~