Блокировка информации об устройстве без монтажа (в linux)
Я пытаюсь получить некоторую информацию (в частности, размер блока) блочного устройства в Linux, в C++. Можно ли получить размер блока устройства, не монтируя его и, возможно, не просматривая динамические файлы (например, в /sys
), но только с помощью системного вызова.
Я пытался с stat
, но возвращает данные о /dev
файловая система, если я спрашиваю о /dev/sdb2
,
Если это невозможно с помощью системного вызова, где я должен искать в динамических файлах (не смог найти его тоже.)
2 ответа
Вы хотите использовать ioctl
, особенно BLKSSZGET
,
Цитирование linux/fs.h:
#define BLKSSZGET _IO(0x12,104)/* get block device sector size */
Непроверенный пример:
#include <sys/ioctl.h>
#include <linux/fs.h>
int fd = open("/dev/sda");
size_t blockSize;
int rc = ioctl(fd, BLKSSZGET, &blockSize);
Я думаю ioctl
значение должно быть unsigned long
чем size_t
(последний связан с памятью), я бы также инициализировал его 0 (на всякий случай BLKSSZGET
возвращается unsigned int
вместо).
#include <sys/ioctl.h>
#include <linux/fs.h>
int fd = open("/dev/sda");
unsigned long blockSize = 0;
int rc = ioctl(fd, BLKSSZGET, &blockSize);