我使用/ proc / diskstats来获取读取和写入的扇区数。 我想将这个数字转换为字节,所以我寻找扇区大小。 我使用How to find floppy\ CD sector size in Linux?来获取磁盘sda,sda1和sda2的扇区大小,但它失败并出现以下错误: 文件/ dev / sda上的ioctl失败,错误无效参数 文件/ dev / sda1上的ioctl失败并显示错误设备的ioctl不正确 和sda2相同。 非常感谢您的帮助。 感谢
struct hd_driveid id;
string fileName = "/dev/";
fileName += diskName;
int fd;
fd = open(fileName.c_str(), O_RDONLY|O_NONBLOCK);
if (fd < 0) {
LogError("Cannot open file " << fileName);
}
else
{
if (ioctl(fd, HDIO_GET_IDENTITY, &id) < 0) {
LogError("failed ioctl on with error " << strerror(errno));
} else {
currBytesPerSector = id.sector_bytes;
}
close(fd);
}
答案 0 :(得分:1)
此ioctl
并不总是适用于某些类型的块设备,但更重要的是,此值不 /proc/diskstats
中报告的实际扇区大小。
diskstats代码返回读取的扇区数,其中扇区的大小取决于BLKSSZGET
返回的值:
int sector_size = 0;
int err = ioctl(fd, BLKSSZGET, §or_size);
if (err > 0) {
currBytesPerSector = sector_size;
}