用户空间程序是否存在包含ioctl
内核模块中使用的代码的常见做法。
mydev.h:
#ifndef MYDEV_H
#define MYDEV_H
#define <linux/ioctl.h>
#define MYDEV_IOC_MAGIC 'C'
#define MYDEV_IOC_FOO _IO(MYDEV_IOC_MAGIC, 0)
#define MYDEV_IOC_BAR _IOW(MYDEV_IOC_MAGIC, 1, int)
#endif
我通常将我的ioctl
代码放在我的内核模块代码中包含的头文件中。我考虑只在我的用户空间应用程序中包含这个头文件,但我意识到linux/ioctl.h文件路径在大多数系统上可能不存在(例如,没有导出内核头文件的系统)。
解决方案似乎是将包含行更改为#include <sys/ioctl.h>
:但后来我无法将此标头用于我的内核模块。
这个问题是否有更好的解决方案,或者有两个独立但几乎相同的头文件是否很常见?