我试图在Linux中用C ++获取块设备的一些信息(特别是块大小)。是否可以在不安装设备的情况下获取设备的块大小,并且可能无需查看动态文件(如/sys
中的文件),但仅限系统调用。
我正在尝试使用stat
,但如果我询问/dev
,它会返回有关/dev/sdb2
文件系统的数据。
如果系统调用不可能,我应该在哪里查看动态文件(也无法找到它。)
答案 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);