找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 21|回复: 2

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

[复制链接]

175

主题

449

回帖

1443

积分

金牌会员

积分
1443
发表于 2013-3-21 10:22:27 | 显示全部楼层 |阅读模式
读了一天多的原码,跑了不少弯路,终于找到方法了,苦啊~~~  

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[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);}

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



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

回复

使用道具 举报

376

主题

5663

回帖

1万

积分

论坛元老

积分
12488
发表于 2013-3-21 10:26:03 | 显示全部楼层
你是在残害我哎,多少年没看C了……
回复

使用道具 举报

2

主题

445

回帖

898

积分

高级会员

积分
898
发表于 2013-3-21 10:49:08 | 显示全部楼层
20cn……哪年的东西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2025-1-12 21:42 , Processed in 0.018544 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表