Linux下如何获取硬盘序列号、MAC地址等硬件信息

在很多系统软件的开发中,需要使用一些系统硬件信息。比如CPU、硬盘、网卡等。所以,得到主机的CPUID、硬盘序列号及网卡的MAC地址,就成为一件很重要的功能。

命令获得

要实现这些信息,标准的Linux系统之中,有很多现成的命令,或者说工具,可以直接使用。

比如,要取得网卡的信息,可以使用

ifconfig

或者

ip a

命令。

取得CPU的信息,可以查看/proc/cpuinfo。或者通过/dev/cpu/[id]/cpuid文件取得cpuid。

要取得硬盘的序列号,可以使用lsblk命令。

如要取得/dev/nvme1n1硬盘的序列号,可以执行命令:

lsblk --nodeps -no serial /dev/nvme1n1

。另外,还可以通过tune2fs命令来获得文件系统的信息,比如创建时间。

比如,执行

tune2fs -l /dev/sda1

就可以看到系统的创建时间、最后挂载时间、最后写入时间等。

C/C++语言取得

如何要在C/C++语言中获得,当然可以直接在语言中调用这些命令,但是也可以使用一些更底层的函数来实现。

需要用到的准备知识有:

  • GCC的嵌入汇编。具体的GCC嵌入汇编知识,请参考相关手册。
  • ioctl系统调用。具体的调用方法,请查看手册页

获取CPUID

按照网上提供的说明,CPUID并不是所有的Intel CPU都支持的。如果支持,汇编调用为:eax置0000,再0003,调用cpuid。

以下为实现代码:

int  
getcpuid (char *id, size_t max)  
{  
  unsigned long maxi, eax, ebx, ecx, edx, unused;  
  
  cpuid (0, maxi, unused, unused, unused);  
  maxi &= 0xffff;  
  if (maxi < 3)  
    {  
      return -1;  
    }  
  
  cpuid (3, eax, ebx, ecx, edx);  
  snprintf (id, max, "%08lx %08lx %08lx %08lx", eax, ebx, ecx, edx);  
  fprintf (stdout, "get cpu id: %s\n", id);  
  
  return 0;  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值