1

/proc/diskstats を使用して、読み書きされたセクターの数を取得しました。この数値をバイトに変換したいので、セクターサイズを探します。Linuxでフロッピー\ CDセクターサイズを見つける方法を使用しましたか? ディスク sda、sda1、および sda2 のセクター サイズを取得しますが、次のエラーで失敗します: ファイル /dev/sda の 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 に答える