dypnlw
枸杞加上
采纳率0%
2016-10-05 11:18 阅读 5.4k

linux下获取硬盘序列号

5

最近在弄加密解密的,然后需要用到硬盘序列号,一路遇到两个问题,查了很多的资料都没有得到的很好的答案,先简单的说一下这两个问题:
1、用linux命令能否查询到硬盘序列号?
2、使用linux C获取硬盘序列号怎么弄,有大神能简单的说一下这方面的知识和思路吗?文字或者网址都可以,需要切实可行的那种。
希望这个问题最终能结贴,给别人一些帮助,开源,分享~

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • morgerton 白萝卜blb 2016-10-05 11:35

    第一个问题:
    http://zhidao.baidu.com/link?url=dkoJVvaUlq--hYwayrna-jaQ9Z_gp5ZLt1Qd6tZOagj_93dXY-sjzcTMM-lscexTqBrkasVsbT6pA7CZMCXZY_

    都二个问题:
    http://bbs.csdn.net/topics/390650082?page=1

    另外附上,奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!

    点赞 1 评论 复制链接分享
  • dypnlw 枸杞加上 2016-10-05 11:36

    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include

    static int getdiskid (char *id, size_t max)
    {
    int fd;
    struct hd_driveid hid;
    FILE *fp;
    char line[0x100], *disk, *root, *p;

    fp = fopen ("/etc/mtab", "r");
    if (fp == NULL)
    {
        fprintf (stderr, "No /etc/mtab file.\n");
        return -1;
    }
    
    fd = -1;
    while (fgets (line, sizeof line, fp) != NULL)
    {
        disk = strtok (line, " ");
        if (disk == NULL)
    {
        continue;
    }
    
        root = strtok (NULL, " ");
        if (root == NULL)
    {
        continue;
    }
    
        if (strcmp (root, "/") == 0)
    {
        for (p = disk + strlen (disk) - 1; isdigit (*p); p --)
            {
                *p = '\0';
            }
        fd = open (disk, O_RDONLY);
        break;
    }
    }
    
    fclose (fp);
    
    if (fd < 0)
    {
        fprintf (stderr, "open hard disk device failed.\n");
        return -1;
    }
    
    if (ioctl (fd, HDIO_GET_IDENTITY, &hid) < 0)
    {
        fprintf (stderr, "ioctl error.\n");
        return -1;
    }
    
    close (fd);
    
    snprintf (id, max, "%s", hid.serial_no);
    fprintf (stdout, "get hard disk serial number: %s\n", id);
    return 0;
    

    }

    int main()
    {
    char dsk_id[256];
    getdiskid(dsk_id, sizeof(dsk_id));
    return(0);
    }

    
    

    这个是在网上搜来的一个代码,但是存在一些问题
    然后在使用linux命令查询硬盘信息的时候,得到的最多的是说用
    hdparm-i/dev/sda
    查询,但是在Ubantu虚拟机下查询不到,

    点赞 评论 复制链接分享
  • dypnlw 枸杞加上 2016-10-06 08:03

    初步查询了可爱的白萝卜关于第二问提供的代码,自己改了一下成功获取了,但是他那个代码是直接查询相应的硬盘名称,然后调用system()函数来创建一个子进程,子进程利用fork()函数实现,这些都是linux系统自己实现的,那么问题来了,虽然它能够创建进程打印出序列号,我怎么把它自动存放到数组中去呢?这个创建进程的调用是有system()函数实现的,并不是由我们的代码实现的。求路过的大神指点啊~

    点赞 评论 复制链接分享

相关推荐