看板Programming
标 题Re: 请问如何在linux中读取硬碟的序号呢?
发信站KKCITY (Mon Aug 14 21:53:52 2006)
转信站ptt!ctu-reader!ctu-peer!news.nctu!nctumenews!news.ind.ntou!news.ntu!bb
※ 引述《[email protected] (好人可以装酷吗)》之铭言:
> 为了保护开发的软体, 希望一套软体只能在一个硬碟上面执行,
> 因此会去读取硬碟独一无二的序号, 若是正确, 方可执行.
> 在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
--
1F:→ wildwolf:可是改 kernel 不就可以改此 identity 140.113.212.31 08/15 07:45