![Linux 中使用 C++ 的 HDIO_GETGEO 和 HDIO_GET_IDENTITY](https://linux22.com/image/68184/Linux%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20C%2B%2B%20%E7%9A%84%20HDIO_GETGEO%20%E5%92%8C%20HDIO_GET_IDENTITY.png)
谁能解释HDIO_GETGEO
和之间的核心区别HDIO_GET_IDENTITY
?
来自 Linux 文档和本文档标题为:HDIO_ ioctl 调用摘要。,我知道前者用于“获取设备几何形状”,后者用于“获取 IDE 标识信息”。
在 HDIO 摘要文档中,据说“struct hd_geometry”对象作为参数传递给“ioctl”调用,并且它将包含“扇区数”。
但是,HDIO_GET_IDENTITY
返回一个无符号字符数组。但从这个问题,我希望struct hd_driveid
包含每个扇区的字节数和其他信息。我在某处读到hd_driveid
可以作为参数传递给ioctl
if 的HDIO_GET_IDNTITY
调用中使用的内容。
我需要澄清所有这些疑问..
另外,HDIO_ ioctl call
我应该使用哪个来获取 Linux 中硬盘的扇区数和每个扇区的字节数?
答案1
GEGEO 返回 BIOS 驱动器几何结构,该几何结构已过时。 IDENTITY 返回原始 ATA 设备标识扇区。您不应该使用其中任何一个。相反,只需从文件 /sys/block/sda/size 和 /sys/block/sda/queue/hw_sector_size 中读取即可。前者以“扇区”为单位给出大小,就好像扇区大小为 512 字节(即使不是 512 字节),后者给出驱动器的实际扇区大小。如果您想要逻辑扇区大小,请使用逻辑块大小。