民工三代 发表于 2013-3-21 10:22:27

在*BSD上读出硬盘硬件信息的方法

读了一天多的原码,跑了不少弯路,终于找到方法了,苦啊~~~

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*   http://www.20cn.net/    */ #include #include #include #include #include #include intmain(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);                exit(1);      }                bzero(&iocmd, sizeof(struct ata_cmd));      dev = atoi(argv);      iocmd.channel = atoi(argv);      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.model);      printf("serial number         %.20s\n", iocmd.u.param.params.serial);      printf("firmware revision   %.8s\n", iocmd.u.param.params.revision);}

--------------------------------------------------------------------------------



在ata_params 还有相当多的信息,包括磁盘转速,各种支持等等,见 sys/ata.h

过客 发表于 2013-3-21 10:26:03

你是在残害我哎,多少年没看C了……

SKIDROW 发表于 2013-3-21 10:49:08

20cn……哪年的东西
页: [1]
查看完整版本: 在*BSD上读出硬盘硬件信息的方法