【发布时间】:2012-02-13 09:37:21
【问题描述】:
我有一个 64 位的 Enterprice SuSE 11 我有一个应用程序,它打开一个 HIDRAW 设备并在其上运行一个 ioctl 函数以从该设备获取原始信息,如下所示:
struct hidraw_devinfo devinfo;
int fd = open("/dev/hidraw0", 0);
int ret = ioctl(fd, HIDIOCGRAWINFO, &devinfo);
...
如果我在 64 位模式下编译这个程序没有错误也没有问题,当我执行应用程序时,ioctl 函数可以正常工作。
g++ main.cpp
如果我在 32 位模式下编译这个程序,也没有错误,没有问题。但是当我执行应用程序时,ioctl 函数返回 EINVAL 错误(errno = 22 , Invalid Argument)
g++ -m32 main.cpp
有什么问题?
注意:
struct hidraw_devinfo
{
__u32 bustype;
__s16 vendor;
__s16 product;
}
【问题讨论】:
标签: linux gcc g++ 32bit-64bit ioctl