5

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

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

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

4

2 回答 2

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);
于 2011-12-07T13:53:35.390 回答
0

我认为该ioctl值应该unsigned longsize_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);
于 2014-01-22T07:52:25.943 回答