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如何查看电脑硬件型号?

    综合硬件信息查看lshw 命令最全面的硬件报告工具(需root权限):sudo lshw -short | grep -i "product\|vendor" # 查看产品型号和制造商sudo lshw -class system # 仅显示系统信息(含型号)输出示例:system TUF……

    2025年7月15日
    7200
  • Linux环境下如何高效实现大篇幅注释的操作方法?

    在Linux环境下,无论是编写Shell脚本、开发应用程序,还是配置系统服务,注释都是提升代码可读性和可维护性的关键,当需要处理大篇幅注释时,掌握不同场景下的注释语法、工具使用及规范技巧尤为重要,既能高效完成注释任务,又能确保注释的规范性和一致性,Shell脚本是最常见的需要大篇幅注释的场景之一,在Bash脚本……

    2025年9月18日
    3900
  • linux 编辑如何保存退出

    Linux 中,使用 vim 编辑时,按 Esc 键后输入 :wq 可保存并退出;

    2025年8月15日
    4400
  • Linux下Vim中文输入难题?

    基础方法:系统级输入法切换Vim本身不提供中文输入功能,需依赖系统输入法(如Fcitx、IBus),常用切换方式:全局快捷键切换Ctrl + 空格:中英文输入法切换(默认最常见)Ctrl + Shift:多个输入法间轮换Super(Windows键) + 空格:部分桌面环境(如GNOME)的默认切换键在Vim中……

    2025年7月14日
    7100
  • 如何查看Linux用户组的详细信息及成员的具体操作步骤?

    Linux系统中,用户组是权限管理和资源分配的核心机制,通过将用户划分到不同组,可以简化对文件、目录等资源的访问控制,无论是系统管理员还是普通用户,掌握查看用户组的方法都是必要的技能,本文将详细介绍多种查看Linux用户组的命令及操作场景,帮助用户高效获取组信息,基础命令查看用户组groups命令:快速查看用户……

    2025年8月30日
    6700

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信