如何在QNX中编程获取硬盘序列号、厂商等详细信息?
QNX系统获取硬盘详细信息的方法
一、文件系统直接读取的方式
QNX支持通过/proc文件系统直接读取部分磁盘信息:
- 读取
/proc/diskinfo:可获取磁盘的设备节点、容量、分区等基础信息 - 读取
/proc/mounts:可获取磁盘对应的挂载路径,每行记录格式为[设备节点] [挂载路径] [文件系统类型] [挂载选项] ...,解析后能关联设备与文件系统路径
不过厂商、序列号这类更精细的硬件信息,还是需要通过devctl系统调用获取。
二、扩展devctl调用获取更多硬件信息
你当前仅使用了DCMD_CAM_DEV_SERIAL_NUMBER,QNX的sys/dcmd_cam.h提供了多个相关命令,可获取厂商、型号等信息:
DCMD_CAM_DEV_VENDOR:读取厂商名称DCMD_CAM_DEV_PRODUCT:读取产品型号DCMD_CAM_DEV_REVISION:读取固件版本DCMD_CAM_DEV_TYPE:读取设备类型(如硬盘、闪存设备)
示例代码
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <devctl.h> #include <sys/dcmd_cam.h> int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "Usage: %s <device-node>\n", argv[0]); exit(EXIT_FAILURE); } int fd = open(argv[1], O_RDONLY); if (fd == -1) { fprintf(stderr, "Failed to open device %s\n", argv[1]); perror("open"); exit(EXIT_FAILURE); } char buf[256]; int error; size_t buf_len = sizeof(buf); // 获取厂商名称 error = devctl(fd, DCMD_CAM_DEV_VENDOR, buf, buf_len, NULL); if (!error) { printf("Vendor: %s\n", buf); } else { perror("Failed to get vendor"); } // 获取产品型号 error = devctl(fd, DCMD_CAM_DEV_PRODUCT, buf, buf_len, NULL); if (!error) { printf("Product Model: %s\n", buf); } else { perror("Failed to get product model"); } // 获取序列号 error = devctl(fd, DCMD_CAM_DEV_SERIAL_NUMBER, buf, buf_len, NULL); if (!error) { printf("Serial Number: %s\n", buf); } else { perror("Failed to get serial number"); } close(fd); return EXIT_SUCCESS; }
三、其他获取方式
- 使用QNX自带工具
diskinfo:直接执行diskinfo <设备节点>(如diskinfo /dev/hd0),会输出包含厂商、型号、序列号、分区表、容量等的完整磁盘信息,脚本或程序可调用该命令并解析输出结果。
内容的提问来源于stack exchange,提问作者Arun Nishad
相关产品推荐
相关产品推荐

