我编写了一个程序来获取硬盘驱动器的详细信息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