“_IO(...)”在Linux中的C头文件中意味着什么?

时间:2013-01-31 13:26:35

标签: c header-files c-preprocessor

我有一个Linux标准头文件,例如

/usr/src/linux-headers-3.2.0-35/include/linux/usbdevice_fs.h

包含define语句如下:

#define USBDEVFS_SUBMITURB32       _IOR('U', 10, struct usbdevfs_urb32)
#define USBDEVFS_DISCARDURB        _IO('U', 11)
#define USBDEVFS_REAPURB           _IOW('U', 12, void *)

'_IOR','_IO'和'_IOW'是什么意思?实际给出了什么价值,例如到USBDEVFS_DISCARDURB

2 个答案:

答案 0 :(得分:7)

他们根据ioctl函数和输入参数定义ioctl数字。 在include/asm-generic/ioctl.h中的内核中定义。

您需要在计划中加入<linux/ioctl.h>(或linux/asm-generic/ioctl.h)。在包括之前 /usr/src/linux-headers-3.2.0-35/include/linux/usbdevice_fs.h

您无法“预编译”此值(例如USBDEVFS_DISCARDURB),因为它们在其他平台上可能不同。例如,您在普通的旧版x86上开发代码,但是有人会尝试在x86_64 / arm / mips / etc上使用它。因此,您应始终包含内核的ioctl.h以确保使用正确的值。

答案 1 :(得分:0)

这些也是在别处定义的宏。

一般情况下,如果您想在计算预处理器后查看代码,请使用

gcc -E foo.c

这将输出您预先处理的代码

例如:

foo.c的

#define FORTY_TWO 42

int main(void)
{
  int foo = FORTY_TWO;
}

将为您提供gcc -E foo.c

int main(void)
{
  int foo = 42;
}