我正在构建一个需要读取HD序列的C / C ++程序。我知道如果我运行这些命令:
hdparm -i /dev/sda | grep -i serial
/sbin/udevadm info --query=property --name=sda | grep "ID_SERIAL"
我可以得到它,第一个需要root权限,但第二个不需要。
但是,我的应用程序无法访问外部程序,并且它不能要求root权限,那么是否有一个C / C ++ linux库具有返回HD序列的功能?或者有没有其他方法不需要运行程序?
答案 0 :(得分: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
答案 1 :(得分:2)
您可以使用ioctls访问硬盘驱动器信息,就像hdparm一样。 HDIO_GET_IDENTITY
ioctl应该足以满足您的需求。它返回一个结构,其中(IIRC)包括序列号;谷歌搜索应该可以帮助您找到结构定义。