如何在没有root权限的情况下在Linux中读取HD序列?

时间:2013-11-12 14:23:55

标签: c++ c linux

我正在构建一个需要读取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序列的功能?或者有没有其他方法不需要运行程序?

2 个答案:

答案 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)包括序列号;谷歌搜索应该可以帮助您找到结构定义。