我正在尝试在C ++中获取Linux设备中的一些信息(特别是块大小)。 是否有可能没有安装它的设备的块大小,并可能不查看dynamic文件(如在/sys
),但只有一个系统调用。
我正在尝试使用stat
,但如果询问/dev/sdb2
,它会返回有关/dev
文件系统的数据。
如果系统调用是不可能的,我应该在哪里查看dynamic文件(无法find它)。
你想要使用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);