Re: 請問如何在linux中讀取硬碟的序號呢?
※ 引述《rattler.bbs@bbs.ntu.edu.tw (好人可以裝酷嗎)》之銘言:
> 為了保護開發的軟體, 希望一套軟體只能在一個硬碟上面執行,
> 因此會去讀取硬碟獨一無二的序號, 若是正確, 方可執行.
> 在win32系統下, 執行上應該是沒有問題, 但是在linux則碰到
> 下面的問題:
> 1. google上面有看到, hdparm 可以用來查詢目前硬碟的資料,
> 請問C 語言中, 可不可能直接呼叫此指令, 並且傳回執行結果?
> 2. hdparm 一定要在root權限下才可以使用, 但軟體使用者,
> 未必會有root權限, 請問要如何能讓一班使用者讀取到硬牒序號?
> 3. 是否有別的方式, 或是程式碼, 可以讓一班使用者讀取到
> 硬碟的序號呢?
> 謝謝....
參考hdparm的資訊後, 你可以得到以下重點程式碼
#include <sys/ioctl.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/hdreg.h>
int main()
{
int fd;
static struct hd_driveid id;
fd = open("/dev/hda", O_RDONLY);
ioctl(fd, HDIO_GET_IDENTITY, &id);
printf("SerialNo=%.20s\n", id.serial_no);
}
其中ioctl開啟的檔案為/dev/內的檔案, 基本上取得serialno的資訊
linux下就是用以上這段簡單的程式而已
但是因為開啟的為/dev/ 此目錄內的檔案為root權限才可以讀取
而且大多是可直接控制硬體的檔案 把這些程式用成普通user可以使用
實屬相當不明智
所以 你應該
把這段程式修改 把其設定成有插入硬碟(我假設有hotplug)
root就自動執行該段程式碼, 把執行結果copy到一個檔案
讓普通user可以讀取該檔案即可
--
┌─────◆KKCITY◆─────┐▇─┐KKADSL→六星級優質連線服務
│ bbs.kkcity.com.tw │┴ └─▇ 馬上申請帶你上網環遊全世界!
└──《From:140.126.21.172 》──┘ KKADSL ┴ http://adsl.kkcity.com.tw
--
→
08/15 07:45, , 1F
08/15 07:45, 1F
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章