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
Requestargp 无效。
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)