我需要获取Win和*nix机器上硬盘的规格。在Linux上,我使用了如下的<hdreg.h>
:
static struct hd_driveid hd;
int device;
if ((device = open("/dev/sda", O_RDONLY | O_NONBLOCK)) < 0)
{
cerr << "ERROR: Cannot open device /dev/sda \n";
exit(1);
}
if (!ioctl(device, HDIO_GET_IDENTITY, &hd))
{
cout << hd.model << endl;
cout << hd.serial_no << endl;
cout << hd.heads << endl;
}
我需要hd_driveid
来提供更多有关磁盘的信息。我想知道:
- 分区数量
- 每个分区的规格(格式、标签、标志、大小、起始点、轨道数等)
- 每个柱面的轨道数
- 总轨道数
- 最大块大小
- 最小块大小
- 默认块大小
- 设备的总大小
我的问题是:
- 是否有一种通用的(与平台无关的)方式来连接硬件?我希望在win和*nix上使用相同的代码。(即使没有其他方法,除了将汇编代码嵌入到cpp中)
- 如果没有,如何在*nix中获取上述信息?