C 語言無標準庫直接獲取硬件信息,需調用平台特定 API:
/proc/cpuinfo、/proc/meminfo、/sys/class/dmi/id/、lspci、lsblk、dmesg 等虛擬文件或調用 libudev、libpci。#include
#include
void PrintCpuInfo() {
SYSTEM_INFO si; GetSystemInfo(&si);
printf("處理器架構: %u\n處理器數: %u\n頁大小: %u\n", si.wProcessorArchitecture, si.dwNumberOfProcessors, si.dwPageSize);
// 詳細型號需 WMI 查詢 Win32_Processor
}
#include
void PrintMemoryInfo() {
MEMORYSTATUSEX ms; ms.dwLength = sizeof(ms);
GlobalMemoryStatusEx(&ms);
printf("總物理內存: %llu MB\n可用: %llu MB\n", ms.ullTotalPhys/1024/1024, ms.ullAvailPhys/1024/1024);
}
void PrintDiskInfo() {
char drives[256]; GetLogicalDriveStringsA(256, drives);
for (char* d = drives; *d; d += strlen(d)+1) {
ULARGE_INTEGER free, total, totalFree;
GetDiskFreeSpaceExA(d, &free, &total, &totalFree);
printf("%s 總計: %.2f GB 可用: %.2f GB\n", d, total.QuadPart/1024.0/1024/1024, free.QuadPart/1024.0/1024/1024);
}
}
#include
void PrintGpuInfo() {
DISPLAY_DEVICEA dd; dd.cb = sizeof(dd);
for (DWORD i = 0; EnumDisplayDevicesA(NULL, i, &dd, 0); i++) {
printf("設備: %s\n描述: %s\n", dd.DeviceName, dd.DeviceString);
}
}
參考:CSDN 相關帖子,核心步驟:
CoInitializeEx 初始化 COM。CoCreateInstance(CLSID_WbemLocator) 獲取 IWbemLocator。ConnectServer 連接 ROOT\\CIMV2。CoSetProxyBlanket 設置安全級別。ExecQuery("SELECT * FROM Win32_Processor") 等查詢類。IEnumWbemClassObject 讀取屬性。// 讀取 /proc/cpuinfo
FILE* f = fopen("/proc/cpuinfo", "r");
char line[256];
while (fgets(line, sizeof(line), f)) {
if (strncmp(line, "model name", 10) == 0) printf("%s", line);
}
fclose(f);