阻止未安装的设备信息(在Linux中)

我正在尝试在C ++中获取Linux设备中的一些信息(特别是块大小)。 是否有可能没有安装它的设备的块大小,并可能不查看dynamic文件(如在/sys ),但只有一个系统调用。

我正在尝试使用stat ,但如果询问/dev/sdb2 ,它会返回有关/dev文件系统的数据。

如果系统调用是不可能的,我应该在哪里查看dynamic文件(无法find它)。

Solutions Collecting From Web of "阻止未安装的设备信息(在Linux中)"

你想要使用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);