10

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ますか?

4

2 に答える 2

8

それらは、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したがって、正しい値を使用していることを確認するために、常にカーネルを含める必要があります。

于 2013-01-31T14:18:50.187 に答える
1

これらは、別の場所で定義されたマクロでもあります。

一般に、プリプロセッサが計算された後にコードを見たい場合は、

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;
}
于 2013-01-31T13:28:13.223 に答える