读了一天多的原码,跑了不少弯路,终于找到方法了,苦啊~~~ 
a.out 0 0 得到第一个ide的主盘的信息 a.out 0 1 得到副盘的信息 a.out 1 0 得到第二个ide的主盘的信息 a.out 1 1 得到副盘的信息
以次类推
代码:
/* get atadisk serial.no for *BSD * Copyright (C) 20CN Security Group 2005. * By NetDemon <netdemon@20cn.net> * http://www.20cn.net/ */ #include <sys/types.h> #include <sys/ata.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
int main(int argc, char **argv) { struct ata_cmd iocmd; int fd ,dev;
if ((fd = open("/dev/ata", O_RDWR)) < 0){ printf("device not found \n" ); exit(1); }
if (argc < 3){ printf("usage: %s channel device \n", argv[0]); exit(1); } bzero(&iocmd, sizeof(struct ata_cmd)); dev = atoi(argv[2]); iocmd.channel = atoi(argv[1]); iocmd.device = dev; iocmd.cmd = ATAGPARM; if (ioctl(fd, IOCATA, &iocmd) < 0){ printf("IO error \n"); exit(1); } printf("device model %.40s\n", iocmd.u.param.params[dev].model); printf("serial number %.20s\n", iocmd.u.param.params[dev].serial); printf("firmware revision %.8s\n", iocmd.u.param.params[dev].revision);
}
[此贴被 NetDemon(netdemon) 在 04月13日03时59分 编辑过]
|