1

我使用 /proc/diskstats 来获取读取和写入的扇区数。我想将此数字转换为字节,因此我查找扇区大小。我使用了如何在 Linux 中查找 floppy\ CD 扇区大小?获取磁盘 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);
          }
4

1 回答 1

1

ioctl并不总是适用于某些类型的块设备,但更重要的是,这个值不是/proc/diskstats.

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

    int sector_size = 0;
    int err = ioctl(fd, BLKSSZGET, &sector_size);
    if (err > 0) {
        currBytesPerSector = sector_size;
    }
于 2013-11-18T10:50:42.580 回答