Re: 請問如何在linux中讀取硬碟的序號呢?

看板Programming作者時間18年前 (2006/08/15 02:01), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《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
可是改 kernel 不就可以改此 identity
08/15 07:45, 1F
文章代碼(AID): #14uBfW00 (Programming)
文章代碼(AID): #14uBfW00 (Programming)