我编写了一个程序,使用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上运行)。
答案 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