4

我正在构建一个需要读取高清串行的 C/C++ 程序。我知道如果我运行这些命令:

hdparm -i /dev/sda | grep -i serial

/sbin/udevadm info --query=property --name=sda | grep "ID_SERIAL"

我可以得到它,第一个需要root权限,但第二个不需要。

但是,我的应用程序无法访问外部程序,也不需要root权限,那么有没有一个C/C++ linux库具有返回高清序列的功能?或者有没有其他不需要运行程序的方法?

4

2 回答 2

4

通过仅列出/dev/disk/by-id/目录,您可以获得系统上所有块设备的 ID。输出与命令不完全相同,但足够接近。

为此,您不需要 root 权限。


在我的电脑上:

$ /sbin/udevadm info --query=property --name=sda | grep "ID_SERIAL"
ID_SERIAL=WDC_WD5000AAKX-60U6AA0_WD-WCC2EHJ93860
ID_SERIAL_SHORT=WD-WCC2EHJ93860

$ ll /dev/disk/by-id/ | grep sda
lrwxrwxrwx 1 root root   9 Nov 11 07:47 ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EHJ93860 -> ../../sda
lrwxrwxrwx 1 root root  10 Nov 11 07:47 ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EHJ93860-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Nov 11 07:47 ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EHJ93860-part2 -> ../../sda2
lrwxrwxrwx 1 root root  10 Nov 11 07:47 ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EHJ93860-part3 -> ../../sda3
于 2013-11-12T15:43:40.860 回答
2

您可以使用 ioctls 访问硬盘信息,就像 hdparm 一样。HDIO_GET_IDENTITYioctl 应该足以满足您的需求。它返回一个结构,其中(IIRC)包括序列号;谷歌搜索应该可以帮助您找到结构定义。

于 2013-11-12T14:30:30.280 回答