linux如何通过c读取硬件信息

Linux 中,通过 C 语言读取硬件信息通常使用系统调用和读取 `/proc

Linux 系统中,通过 C 语言读取硬件信息是一项常见的任务,通常涉及访问系统文件、使用特定的库函数或调用系统命令,以下是一些常见的硬件信息获取方法及其实现方式。

linux如何通过c读取硬件信息

CPU 信息

CPU 信息可以通过读取 /proc/cpuinfo 文件来获取,该文件包含了 CPU 的详细信息,如型号、核心数、频率等。

示例代码:

#include <stdio.h>
#include <stdlib.h>
void read_cpuinfo() {
    FILE *fp;
    char line[256];
    fp = fopen("/proc/cpuinfo", "r");
    if (fp == NULL) {
        perror("Failed to open /proc/cpuinfo");
        exit(EXIT_FAILURE);
    }
    while (fgets(line, sizeof(line), fp) != NULL) {
        printf("%s", line);
    }
    fclose(fp);
}
int main() {
    read_cpuinfo();
    return 0;
}

内存信息

内存信息可以通过读取 /proc/meminfo 文件来获取,该文件包含了内存的总量、可用内存、缓存等信息。

示例代码:

#include <stdio.h>
#include <stdlib.h>
void read_meminfo() {
    FILE *fp;
    char line[256];
    fp = fopen("/proc/meminfo", "r");
    if (fp == NULL) {
        perror("Failed to open /proc/meminfo");
        exit(EXIT_FAILURE);
    }
    while (fgets(line, sizeof(line), fp) != NULL) {
        printf("%s", line);
    }
    fclose(fp);
}
int main() {
    read_meminfo();
    return 0;
}

硬盘信息

硬盘信息可以通过调用 ioctl 函数或读取 /proc/partitions/sys/block/ 目录下的文件来获取,以下是一个使用 ioctl 获取硬盘信息的示例。

linux如何通过c读取硬件信息

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/hdreg.h>
#include <unistd.h>
void get_disk_info(const char *device) {
    int fd;
    struct hd_driveid drive_info;
    fd = open(device, O_RDONLY | O_NONBLOCK);
    if (fd == -1) {
        perror("Failed to open device");
        exit(EXIT_FAILURE);
    }
    if (ioctl(fd, HDIO_GET_IDENTITY, &drive_info) == -1) {
        perror("Failed to get disk info");
        close(fd);
        exit(EXIT_FAILURE);
    }
    printf("Model: %s
", drive_info.model);
    printf("Serial: %s
", drive_info.serial_no);
    printf("Heads: %d
", drive_info.heads);
    printf("Sectors: %d
", drive_info.sectors);
    printf("Cylinders: %d
", drive_info.cylinders);
    printf("Total sectors: %d
", drive_info.lba_capacity);
    close(fd);
}
int main() {
    get_disk_info("/dev/sda");
    return 0;
}

网络信息

网络信息可以通过读取 /sys/class/net/ 目录下的文件或调用 ioctl 函数来获取,以下是一个获取网络接口信息的示例。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <unistd.h>
#include <arpa/inet.h>
void get_network_info(const char *interface) {
    int fd;
    struct ifreq ifr;
    struct sockaddr_in *addr;
    fd = socket(AF_INET, SOCK_DGRAM, 0);
    if (fd == -1) {
        perror("Failed to create socket");
        exit(EXIT_FAILURE);
    }
    strncpy(ifr.ifr_name, interface, IFNAMSIZ);
    ifr.ifr_name[IFNAMSIZ 1] = '';
    if (ioctl(fd, SIOCGIFADDR, &ifr) == -1) {
        perror("Failed to get IP address");
        close(fd);
        exit(EXIT_FAILURE);
    }
    addr = (struct sockaddr_in *)&ifr.ifr_addr;
    printf("IP Address: %s
", inet_ntoa(addr->sin_addr));
    if (ioctl(fd, SIOCGIFNETMASK, &ifr) == -1) {
        perror("Failed to get netmask");
        close(fd);
        exit(EXIT_FAILURE);
    }
    addr = (struct sockaddr_in *)&ifr.ifr_netmask;
    printf("Netmask: %s
", inet_ntoa(addr->sin_addr));
    close(fd);
}
int main() {
    get_network_info("eth0");
    return 0;
}

显卡信息

显卡信息可以通过读取 /proc/fb 或调用 driglx API 来获取,以下是一个使用 driglx 获取显卡信息的示例。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <GL/glx.h>
#include <GL/glxext.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/Xdamage.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xpresent.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/Xshape.h>
#include <X11/extensions/Xsync.h>
#include <X11/extensions/Xinput2.h>
#include <X11/extensions/Xinerama.h>
#include <X11/extensions/Xkb.h>
#include <X11/extensions/Xcms.h>
#include <X11/extensions/Xprint.h>
#include <X11/extensions/Xpn.h>
#include <X11/extensions/Xmng.h>
#include <X11/extensions/Xv.h>
#include <X11/extensions/XvMC.h>
#include <X11/extensions/XIE.h>
#include <X11/extensions/Xres.h>
#include <X11/extensions/Xtest.h>
#include <X11/extensions/Xsec.h>
#include <X11/extensions/Xscrnsaver.h>
#include <X11/extensions/Xss.h>
#include <X11/extensions/Xtrapv.h>
#include <X11/extensions/Xrecord.h>
#include <X11/extensions/Xrandr.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/Xdamage.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xpresent.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/Xshape.h>
#include <X11/extensions/Xsync.h>
#include <X11/extensions/Xinput2.h>
#include <X11/extensions/Xinerama.h>
#include <X11/extensions/Xkb.h>
#include <X11/extensions/Xcms.h>
#include <X11/extensions/Xprint.h>
#include <X11/extensions/Xpn.h>
#include <X11/extensions/Xmng.h>
#include <X11/extensions/Xv.h>
#include <X11/extensions/XvMC.h>
#include <X11/extensions/XIE.h>
#include <X11/extensions/Xres.h>
#include <X11/extensions/Xtest.h>
#include <X11/extensions/Xsec.h>
#include <X11/extensions/Xscrnsaver.h>
#include <X11/extensions/Xss.h>
#include <X11/extensions/Xtrapv.h>
#include <X11/extensions/Xrecord.h>
#include <X11/extensions/Xrandr.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/Xdamage.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xpresent.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/Xshape.h>
#include <X11/extensions/Xsync.h>
#include <X11/extensions/Xinput2.h>
#include <X11/extensions/Xinerama.h>
#include <X11/extensions/Xkb.h>
#include <X11/extensions/Xcms.h>
#include <X11/extensions/Xprint.h>
#include <X11/extensions/Xpn.h>
#include <X11/extensions/Xmng.h>
#include <X11/extensions/Xv.h>
#include <X11/extensions/XvMC.h>
#include <X11/extensions/XIE.h>
#include <X11/extensions/Xres.h>
#include <X11/extensions/Xtest.h>
#include <X11/extensions/Xsec.h>
#include <X11/extensions/Xscrnsaver.h>
#include <X11/extensions/Xss.h>
#include <X11/extensions/Xtrapv.h>
#include <X11/extensions/Xrecord.h>
#include <X11/extensions/Xrandr.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/Xdamage.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xpresent.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/Xshape.h>
#include <X11/extensions/Xsync.h>
#include <X11/extensions/Xinput2.h>
#include <X11/extensions/Xinerama.h>
#include <X11/extensions/Xkb.h>
#include <X11/extensions/Xcms.h>
#include <X11/extensions/Xprint.h>
#include <X11/extensions/Xpn.h>
#include <X11/extensions/Xmng.h>
#include <X11/extensions/Xv.h>
#include <X11/extensions/XvMC.h>
#include <X11/extensions/XIE.h>
#include <X11/extensions/Xres.h>
#include <X11/extensions/Xtest.h>
#include <X11/extensions/Xsec.h>
#include <X11/extensions/Xscrnsaver.h>
#include <X11/extensions/Xss.h>
#include <X11/extensions/Xtrapv.h>
#include <X11/extensions/Xrecord.h>
#include <X11/extensions/Xrandr.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/Xdamage.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xpresent.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/Xshape.h>
#include <X11/extensions/Xsync.h>
#include <X11/extensions/Xinput2.h>
#include <X11/extensions/Xinerama.h>
#include <X11/extensions/Xkb.h>
#include <X11/extensions/Xcms.h>
#include <X11/extensions/Xprint.h>
#include <X11/extensions/Xpn.h>
#include <X11/extensions/Xmng.h>
#include <X11/extensions/Xv.h>
#include <X11/extensions/XvMC.h>
#include <X11/extensions/XIE.h>
#include <X11/extensions/Xres.h>
#include <X11/extensions/Xtest.h>
#include <X11/extensions/Xsec.h>
#include <X11/extensions/Xscrnsaver.h>
#include <X11/extensions/Xss.h>
#include <X11/extensions/Xtrapv.h>
#include <X11/extensions/Xrecord.h>
#include <X11/extensions/Xrandr.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/Xdamage.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xpresent.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/Xshape.h>
#include <X11/extensions/Xsync.

以上内容就是解答有关linux如何通过c读取硬件信息的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

linux如何通过c读取硬件信息

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/13477.html

(0)
酷番叔酷番叔
上一篇 2025年8月19日 15:06
下一篇 2025年8月19日 15:11

相关推荐

  • Linux能运行exe程序吗?

    使用Wine(推荐)原理:Wine(Wine Is Not an Emulator)是一个兼容层,通过转换Windows API调用为Linux可执行指令来运行.exe文件,无需安装Windows系统,步骤:安装WineUbuntu/Debian系: sudo apt update && sud……

    2025年8月7日
    11000
  • linux如何把一个文件夹下

    Linux中,可使用“mv 源文件夹/* 目标文件夹/”命令把一个

    2025年8月18日
    11900
  • linux命令如何下载数据库

    Linux中,可使用包管理工具如apt-get install(Debian系)

    2025年8月9日
    10000
  • Linux操作系统下,获取本机IP地址的常用方法有哪些?

    在Linux系统中获取本机IP地址是日常运维、网络配置和开发调试中的常见需求,本机IP地址可分为内网IP(局域网IP)和公网IP(外网IP),内网IP是局域网内部分配的地址,公网IP则是互联网上可见的出口IP,以下详细介绍几种常用的Linux获取本机IP的方法,涵盖命令行工具、系统配置文件解析及自动化脚本场景……

    2025年8月26日
    84700
  • 如何以root身份进入Linux系统?

    在Linux系统中,root用户是拥有最高权限的超级管理员,能够执行所有系统操作,包括安装软件、修改系统配置、管理用户权限等,由于root权限的敏感性,正确、安全地以root身份进入系统至关重要,本文将详细介绍多种以root身份进入Linux系统的方法,包括适用场景、操作步骤及注意事项,并通过表格对比不同方法的……

    2025年8月29日
    2.1K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信