IOCTL:HDIO_GET_IDENTITY的参数无效

时间:2014-04-18 06:25:39

标签: c linux centos hard-drive ioctl

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

编写程序时,我在内核源代码中引用Documentation/ioctl/hdio.txt(2.6.32)。

以下是我的主要代码:

unsigned char driveid[512];
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上运行)。

1 个答案:

答案 0 :(得分:0)

HDIO_GET_IDENTITY ioctl()没有将原始字符缓冲区作为其第三个参数。

它使用linux/hdreg.h中定义的结构。

struct hd_driveid  driveid; 
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);
}
这样它应该有效。请注意,它仅适用于IDE / SATA驱动器,不支持SCSI。 具有 如果您想知道如何在命令ioctl()成功返回后获取信息,我建议您通过

http://lxr.free-electrons.com/source/include/linux/hdreg.h?v=2.6.36