我有一個64位的企業單位的SuSE 11 我有打開HIDRAW設備並在其上運行的ioctl函數來得到這種設備的原始信息象下面這樣的應用程序:關於執行ioctl函數,在32位模式下編譯和在64位os上編譯64位模式有什麼不同?
struct hidraw_devinfo devinfo;
int fd = open("/dev/hidraw0", 0);
int ret = ioctl(fd, HIDIOCGRAWINFO, &devinfo);
...
如果我編譯這個程序中64位模式沒有錯誤,沒有問題,當我執行應用程序時,ioctl函數可以正常工作。
g++ main.cpp
如果我在32位模式下編譯這個程序,也沒有錯誤,也沒有問題。但是當我執行應用程序的ioctl函數返回EINVAL錯誤(錯誤= 22,參數無效)
g++ -m32 main.cpp
什麼問題?
注:
struct hidraw_devinfo
{
__u32 bustype;
__s16 vendor;
__s16 product;
}
和:http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=commit;h=ae5e49c79c051ea1d5ca91cbd4a0d22189067ba3 – Greg 2012-03-27 04:36:49