在哪里可以找到系统调用参数的定义?

时间:2016-04-19 18:51:28

标签: linux system-calls ioctl

在ioctl手册页中,它定义了:

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

例如:

ioctl(fd,FIONREAD,&nread);     

我在哪里可以在Linux中找到此FIONREAD信息?这些信息在哪里定义?有多少种类型?

2 个答案:

答案 0 :(得分:1)

通常,系统调用的手册页(man 2 ioctl - section 2 is for system calls)是正确的位置。

ioctl是一种特殊情况,因为此系统调用的目的是允许应用程序将命令发送到不适合一般模具的设备。因此,参数的文档通常不在ioctl的文档中,而是在设备驱动程序的文档中。设备的手册页在第4节(或某些Unix变体的第7节)。

在Linux上,ioctl(2)手册页引用ioctl_list(2),其中包含常见ioctl类型的摘要。有关设备手册页中某些ioctl的更多文档,例如tty_ioctl(4)(终端 - 这是FIONREAD用于的内容)和sd(4)(具有类似SCSI的接口的磁盘)。 kernel documentation中记录了更多ioctl,例如CD drives。对于许多驱动程序,Linux缺少文档,您需要引用内核源代码或标题(在/usr/include下搜索并希望您能找到评论)。

答案 1 :(得分:0)

根据经验,只要你在所有大写字母中都有一个标识符,至少在c语言中,它通常在某个头文件中定义。它可以是类型,枚举,也可以是明确定义的符号。大多数情况下,查看头文件只对查看您必须选择的其他可能选项有用。使用find和grep通常会找到该文件(linux示例):

cd /usr/include; find . -type f -name \*.h -print0 | xargs -0 grep <name>