gpt4 book ai didi

c++ - 无法在特定磁盘上进行 ioctl

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:06 26 4
gpt4 key购买 nike

我使用/proc/diskstats 来获取读取和写入的扇区数。我想将这个数字转换为字节,所以我寻找扇区大小。我用了How to find floppy\ CD sector size in Linux?获取磁盘 sda、sda1 和 sda2 的扇区大小,但失败并出现以下错误:文件/dev/sda 上的 ioctl 失败,参数无效文件/dev/sda1 上的 ioctl 失败,错误为 Inappropriate ioctl for device和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);
}

最佳答案

ioctl 并不总是适用于某些类型的 block 设备,但更重要的是,此值不是 中报告的实际扇区大小/proc/diskstats.

diskstats 代码返回读取的扇区数,其中扇区大小根据 BLKSSZGET 返回的值确定:

    int sector_size = 0;
int err = ioctl(fd, BLKSSZGET, &sector_size);
if (err > 0) {
currBytesPerSector = sector_size;
}

关于c++ - 无法在特定磁盘上进行 ioctl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com