ioctl(2) - Linux 手册页
名称
ioctl - 控制设备
概要
#include <sys/ioctl.h>
int ioctl(int d, int request, ...);
描述
ioctl() 函数用于操作特殊文件的底层设备参数。特别是,字符特殊文件的许多操作特性(例如终端)都可以使用
ioctl() 请求来控制。参数
d 必须是一个打开的文件描述符。
第二个参数是设备相关的请求代码。第三个参数是指向内存的无类型指针。传统上是 char *argp(源于 void * 成为有效 C 代码之前的时代),在此讨论中将如此命名。
一个 ioctl() request 编码了参数是 输入 参数还是 输出 参数,以及参数 argp 的大小(以字节为单位)。用于指定 ioctl() request 的宏和定义位于文件 <sys/ioctl.h> 中。
返回值
通常,成功时返回零。少数
ioctl() 请求使用返回值作为输出参数,并在成功时返回一个非负值。发生错误时,返回 -1,并且
errno 被设置为适当的值。
错误
- EBADF
- d 不是有效的描述符。
- EFAULT
- argp 指向一个无法访问的内存区域。
- EINVAL
- Request 或 argp 无效。
- ENOTTY
- d 未与字符特殊设备关联。
- ENOTTY
- 指定的请求不适用于描述符 d 引用的对象类型。
符合
没有单一标准。
ioctl() 的参数、返回值和语义因所涉及的设备驱动程序而异(该调用用作一个万能方法,用于不适合 UNIX 流 I/O 模型的操作)。请参阅
ioctl_list(2),以获取许多已知
ioctl() 调用的列表。
ioctl() 函数调用出现在 Version 7 AT&T UNIX 中。
说明
为了使用此调用,需要一个打开的文件描述符。通常,
open(2) 调用会产生不希望的副作用,在 Linux 下可以通过赋予它
O_NONBLOCK 标志来避免。
参见
execve(2),
fcntl(2),
ioctl_list(2),
open(2),
sd(4),
tty(4)
引用自
apple2(1),
apple2(6),
arp(7),
capabilities(7),
console_ioctl(4),
cstream(1),
dsp56k(4),
errno(3),
explain(1),
explain(3),
explain_ioctl(3),
explain_ioctl_or_die(3),
explain_lca2010(1),
fd(4),
forkpty(3),
haveged(8),
hwstamp_ctl(8),
if_nameindex(3),
if_nametoindex(3),
ksh93(1),
lp(4),
mgettydefs(4),
ntfsclone(8),
perf_event_open(2),
perlfunc(1),
phosphor(1),
phosphor(6),
pl(1),
pty(7),
random(4),
read(2),
rmt(8),
rtc(4),
sane-pint(5),
scrub(1),
select_tut(2),
setsockopt(2),
signal(7),
socket(2),
socket(7),
st(4),
tcgetsid(3),
tcp(7),
termio(7),
tty_ioctl(4),
udp(7),
unix(7),
vche(1),
vcsa(4),
write(2)