无需在Linux中安装即可阻止设备信息

时间:2011-12-07 13:41:45

标签: linux block-device

我试图在Linux中用C ++获取块设备的一些信息(特别是块大小)。是否可以在不安装设备的情况下获取设备的块大小,并且可能无需查看动态文件(如/sys中的文件),但仅限系统调用。

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

如果系统调用不可能,我应该在哪里查看动态文件(也无法找到它。)

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

我认为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);