簡體   English   中英

如何在沒有root權限的情況下在Linux中讀取HD序列?

[英]How to read HD serial in Linux without root privileges?

我正在構建一個需要讀取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序列的功能? 或者有沒有其他方法不需要運行程序?

只需列出/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

您可以使用ioctls訪問硬盤驅動器信息,就像hdparm一樣。 HDIO_GET_IDENTITY ioctl應該足以滿足您的需求。 它返回一個結構,其中(IIRC)包括序列號; 谷歌搜索應該可以幫助您找到結構定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM