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