c++获取系统信息(操作系统,cpu,内存,ip,mac)


#include <stdio.h>

#include <tchar.h>
#include <windows.h>
#include "winsock.h"
#include <string>
#include <iostream>
#include <Iphlpapi.h>
using std::cout;using std::string;using std::iostream;
using std::endl;using std::ios;using std::fstream;
using std::ofstream;using std::cin;
#pragma comment( lib, "Ws2_32.lib")
#pragma comment(lib,"Iphlpapi.lib")
using namespace std;
typedef   void(WINAPI *FunctionGlobalMemoryStatusEx)(LPMEMORYSTATUSEX);//声明函数原型指针
#if (_WIN32_WINNT < 0x0600) // [zyl910] 低版本的Windows SDK没有定义 RelationProcessorPackage 等常量
#define RelationProcessorPackage 3
#define RelationGroup 4
#endif
typedef BOOL (WINAPI *LPFN_GLPI)(
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, 
PDWORD);
int get_cpu_num(void)
{
LPFN_GLPI glpi;
BOOL done = FALSE;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr = NULL;
DWORD returnLength = 0;
DWORD processorPackageCount = 0;
DWORD byteOffset = 0;


glpi = (LPFN_GLPI) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),
"GetLogicalProcessorInformation");
if (NULL == glpi) 
{
_tprintf(TEXT("\nGetLogicalProcessorInformation is not supported.\n"));
return -1;
}


while (!done)
{
DWORD rc = glpi(buffer, &returnLength);


if (FALSE == rc) 
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) 
{
if (buffer) 
free(buffer);


buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(
returnLength);


if (NULL == buffer) 
{
_tprintf(TEXT("\nError: Allocation failure\n"));
return -2;
}

else 
{
_tprintf(TEXT("\nError %d\n"), GetLastError());
return -3;
}

else
{
done = TRUE;
}
}


ptr = buffer;
while (byteOffset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= returnLength) 
{
switch (ptr->Relationship) 
{
case RelationProcessorPackage:
processorPackageCount++;
break;
default:
break;
}
byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
ptr++;
}
free(buffer);
return processorPackageCount;
}


void  getSysteminfo(char *version,int size)
{
memset(version,0,size);
SYSTEM_INFO info;                //用SYSTEM_INFO结构判断64位AMD处理器
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C/C++语言中,可以通过不同的方法获取操作系统CPU内存的信息,具体取决于运行的操作系统是Windows还是Linux。 对于Windows操作系统,可以使用WinAPI提供的函数来获取系统信息。以下是获取操作系统CPU内存信息的示例代码: 1. 获取操作系统信息: ```c #include <Windows.h> #include <stdio.h> int main() { OSVERSIONINFOEX osVersionInfo; ZeroMemory(&osVersionInfo, sizeof(OSVERSIONINFOEX)); osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (GetVersionEx((OSVERSIONINFO*)&osVersionInfo)) { printf("操作系统版本:%d.%d\n", osVersionInfo.dwMajorVersion, osVersionInfo.dwMinorVersion); printf("Service Pack:%s\n", osVersionInfo.szCSDVersion); } return 0; } ``` 2. 获取CPU信息: ```c #include <Windows.h> #include <stdio.h> int main() { SYSTEM_INFO systemInfo; GetSystemInfo(&systemInfo); printf("CPU核心数:%d\n", systemInfo.dwNumberOfProcessors); return 0; } ``` 3. 获取内存信息: ```c #include <Windows.h> #include <stdio.h> int main() { MEMORYSTATUSEX memoryStatus; ZeroMemory(&memoryStatus, sizeof(MEMORYSTATUSEX)); memoryStatus.dwLength = sizeof(MEMORYSTATUSEX); if (GlobalMemoryStatusEx(&memoryStatus)) { printf("物理内存总量:%I64d MB\n", memoryStatus.ullTotalPhys / (1024 * 1024)); printf("可用物理内存:%I64d MB\n", memoryStatus.ullAvailPhys / (1024 * 1024)); } return 0; } ``` 对于Linux操作系统,可以使用相应的系统命令或读取系统文件来获取信息。以下是获取操作系统CPU内存信息的示例代码: 1. 获取操作系统信息: ```c #include <stdio.h> int main() { FILE* fp = popen("uname -a", "r"); if (fp) { char buffer[1024]; if (fgets(buffer, sizeof(buffer) - 1, fp)) { printf("操作系统信息:%s\n", buffer); } pclose(fp); } return 0; } ``` 2. 获取CPU信息: ```c #include <stdio.h> int main() { FILE* fp = popen("cat /proc/cpuinfo | grep 'processor' | wc -l", "r"); if (fp) { char buffer[1024]; if (fgets(buffer, sizeof(buffer) - 1, fp)) { printf("CPU核心数:%s", buffer); } pclose(fp); } return 0; } ``` 3. 获取内存信息: ```c #include <stdio.h> int main() { FILE* fp = popen("free -m | grep 'Mem' | awk '{print $2}'", "r"); if (fp) { char buffer[1024]; if (fgets(buffer, sizeof(buffer) - 1, fp)) { printf("物理内存总量:%s MB\n", buffer); } pclose(fp); } return 0; } ``` 以上代码只是演示了获取部分信息,实际可以根据需求获取更详细的系统、CPU内存信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值