在linux下c++程序需获取挂载点路径及物理/逻辑扇区大小:先解析/proc/mounts提取/dev/开头的挂载点与设备名,再通过/sys/block/*/queue/或ioctl(blksszget/blkpbszget)查询扇区大小,最后制表符对齐输出。

在Linux系统下开发C++程序时,需要精确获取硬盘分区的挂载点路径(如/、/home)及其底层物理扇区大小(如512字节或4096字节),用于文件系统对齐、块设备直写或性能调优等场景。
获取所有已挂载分区的挂载路径与对应设备名
读取/proc/mounts文件,逐行解析,提取字段2(挂载点)和字段1(设备路径)。
用std::ifstream打开/proc/mounts,跳过以#开头的注释行;每行用std::istringstream按空格分割,确保至少含3个字段再取前两个。
注意:/proc/mounts中可能包含none、sysfs等伪文件系统,需过滤掉设备名不含/dev/前缀的条目。
根据设备名查物理扇区大小(逻辑扇区与物理扇区)
方法一:读取/sys/block/*/queue/logical_block_size与/sys/block/*/queue/physical_block_size
从设备路径如/dev/sda1提取主设备名sda,拼接为/sys/block/sda/queue/logical_block_size;用std::ifstream读取该文件内容并转为整数。
方法二:使用ioctl系统调用获取更可靠的底层信息
打开设备文件(需root权限或sudo),调用ioctl(fd, BLKPBSZGET, &phys)获取物理扇区大小,ioctl(fd, BLKSSZGET, &logic)获取逻辑扇区大小;失败时回退到方法一。
【必须以只读方式打开设备文件,否则部分设备(如LVM逻辑卷)会拒绝ioctl调用】
将挂载点与扇区信息关联输出
第一步:遍历上一步获得的std::vector<:pair std::string>></:pair>(挂载点→设备路径)
第二步:对每个设备路径,调用扇区查询函数,得到logical_size和physical_size
第三步:用std::cout 格式打印
这一步操作起来很简单,直接把结果按制表符对齐输出即可,无需额外格式化库。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











