ioctl:HDIO_GET_IDENTITY 的参数无效

ioctl:HDIO_GET_IDENTITY 的参数无效

我编写了一个程序来获取硬盘驱动器的详细信息HDIO_ ioctl calls

对于编写程序,我指的是Documentation/ioctl/hdio.txt在内核源代码(2.6.32)中。

这是我的代码的主要部分:

fd = open("/dev/sda", O_RDONLY);  // validated fd.
retval = ioctl(fd, HDIO_GET_IDENTITY, &driveid);
if(retval < 0) {
            perror("ioctl(HDIO_GET_IDENTITY)");
            exit(3);
}

当我(以 root 身份)运行上述代码时,出现以下错误:

ioctl(HDIO_GET_IDENTITY): Invalid argument

程序有什么问题吗?为什么我收到错误?

附加信息:操作系统:CentOS-6.5,内核版本:2.6.32,IA:(x86_64在 VMware 上运行)。

的结果hdparm -i /dev/sda

SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
HDIO_GET_IDENTITY failed: Invalid argument

答案1

/dev/sda您的系统中有设备吗? driveid 变量是什么类型?向我们展示整个代码,或者尝试将driveid更改为:

struct hd_driveid driveid;

然后你可以打印它的内容,即:

printf("Firmware Revision=%.8s\n",driveid.fw_rev);
printf("Cylinders=%d\n",driveid.cyls);

另请检查: http://lxr.free-electrons.com/source/include/linux/hdreg.h?v=2.6.32

相关内容