В приведенном ниже коде я пытаюсь получить размер физического блока устройства по пути к файлу/каталогу, находящемуся в точке монтирования файловой системы этого устройства. Я должен получить ту же информацию, что и команда sudoblockdev --getpbsz /dev/sdc, но вызов ioctl завершается неудачно с сообщением об ошибке Неподходящий ioctl для устройства.
#include
#include
#include
#include
#include
#include
#include
#include
int main() {
const int fd = open("/tmp", O_DIRECTORY | O_RDONLY);
if (fd == -1) {
printf("error %s\n", strerror(errno));
return EXIT_FAILURE;
}
unsigned long num_blocks = 0;
if (ioctl(fd, BLKPBSZGET, &num_blocks) == -1) {
printf("error %s\n", strerror(errno));
return EXIT_FAILURE;
}
printf("physical block size: %lu", num_blocks);
close(fd);
return EXIT_SUCCESS;
}
< /code>
output < /p>
error Inappropriate ioctl for device
Подробнее здесь: https://stackoverflow.com/questions/793 ... f-a-device