Не удалось ioctl на определенных дисках

Я использовал / proc / diskstats, чтобы получить число прочитанных и записанных секторов.
Я хочу преобразовать это число в байты, поэтому я ищу размер сектора.
я использовал Как найти размер сектора дискеты \ CD в Linux? получить размер сектора дисков sda, sda1 и sda2, но он не работает со следующими ошибками:
Сбой ioctl в файле / dev / sda с ошибкой Недопустимый аргумент
Сбой ioctl в файле / dev / sda1 с ошибкой Неправильный 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);
}

1

Решение

это ioctl не всегда работает для определенных типов блочных устройств, но, что более важно, это значение не фактический размер сектора, как указано в /proc/diskstats,

код diskstats возвращает количество прочитанных секторов, где размеры секторов соответствуют значению, возвращенному из BLKSSZGET:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]