linux下怎么用c获取硬盘物理序列号

 我来答
吉祥二进制
高粉答主

2017-04-08 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84583

向TA提问 私信TA
展开全部

1、在Linux系统中通过C语言获取硬盘序列号,可以借助于ioctl()函数,该函数原型如下:

int ioctl(int fd, unsigned long request, ...);
ioctl的第一个参数是文件标识符,用open()函数打开设备时获取。
ioctl第二个参数为用于获得指定文件描述符的标志号,获取硬盘序列号,一般指明为HDIO_GET_IDENTITY。
ioctl的第三个参数为一些辅助参数,要获取硬盘序列号,需要借助于struct hd_driveid结构体来保存硬盘信息 ,该结构体在Linux/hdreg.h中,struct hd_driveid的声明如下
struct hd_driveid {
unsigned short    config;        / lots of obsolete bit flags */
unsigned short    cyls;        /* Obsolete, "physical" cyls */
unsigned short    reserved2;    /* reserved (word 2) */
unsigned short    heads;        /* Obsolete, "physical" heads */
unsigned short    track_bytes;    /* unformatted bytes per track */
unsigned short    sector_bytes;    /* unformatted bytes per sector */
unsigned short    sectors;    /* Obsolete, "physical" sectors per track */
unsigned short    vendor0;    /* vendor unique */
unsigned short    vendor1;    /* vendor unique */
unsigned short    vendor2;    /* Retired vendor unique */
unsigned char    serial_no[20];    /* 0 = not_specified */
unsigned short    buf_type;    /* Retired */
unsigned short    buf_size;    /* Retired, 512 byte increments
* 0 = not_specified
*/
……
};


2、源代码如下

#include <stdio.h>
//ioctl()的声明头文件
#include <sys/ioctl.h>
//硬盘参数头文件, hd_driveid结构声明头文件
#include <linux/hdreg.h>
//文件控制头文件
#include <sys/fcntl.h>
int main()
{
   //用于保存系统返回的硬盘数据信息
   struct hd_driveid id;
   //这里以第一块硬盘为例,用户可自行修改
   //用open函数打开获取文件标识符,类似于windows下的句柄
   int fd = open("/dev/sda", O_RDONLY|O_NONBLOCK);
   //失败返回 
   if (fd < 0) {
     perror("/dev/sda");
     return 1; }
    //调用ioctl()
    if(!ioctl(fd, HDIO_GET_IDENTITY, &id))
     {
       printf("Serial Number=%s\n",id.serial_no);
     }
    return 0;
}

编译完成后,执行效果如下:

cooke1234
2016-11-07 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3613万
展开全部
linux下可以使用hdparm命令查看硬盘的信息。
你可以在C语言里面,调用hdparm,并获取其输出信息即可。
也可以查找hdparm程序的源代码,把查找序列号的代码加进来。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式