linux下用c语言实现查cpu类型和型号等信息

linux下用c语言实现查cpu类型和型号等信息,第1张

都在/proc/ 下面

cpu信息在/proc/cpuinfo

启动时间在/proc/uptime 单位是s

/proc/stat 里面有cpu执行的时间,用户态,系统态,空闲都有

这个需要相关的库以及API。

给你一个获取cpu信息的函数:

DWORD MyCPUSpeed()

{

BSTR bstrMyCpuName=NULL;

BSTR bstrMyPropName = NULL;

VARIANT pVal;

char szText[256];

int nCpuNum=0;

DWORD dwCpuSpeed=0;

IWbemClassObject pCpuInst=NULL;

IWbemQualifierSet pQualSet = NULL;

bstrMyPropName = SysAllocString(L"CurrentClockSpeed");

if(bstrMyPropName == NULL)

{

return dwCpuSpeed;

}

while(1)

{

memset(szText,0,sizeof(szText));

sprintf(szText,"Win32_ProcessorDeviceID=\"CPU%d\"", nCpuNum);

bstrMyCpuName = _bstr_t(szText);

if(bstrMyCpuName == NULL)

{

break;

}

if(pSvc->GetObject(bstrMyCpuName, 0L, NULL, &pCpuInst, NULL) != S_OK)

{

break;

}

if(pCpuInst->Get(bstrMyPropName, 0L, &pVal, NULL, NULL) == S_OK)

{

nCpuNum++;

dwCpuSpeed += pVallVal;

}

VariantClear(&pVal);

SysFreeString(bstrMyCpuName);

bstrMyCpuName = NULL;

}

if(bstrMyPropName != NULL)

{

SysFreeString(bstrMyPropName);

bstrMyPropName = NULL;

}

if(bstrMyCpuName != NULL)

{

SysFreeString(bstrMyCpuName);

bstrMyCpuName = NULL;

}

memset(szText,0,sizeof(szText));

sprintf(szText, "CPU个数: %d, CPU频率: %ld Mhz", nCpuNum, dwCpuSpeed);

cout<<"------------------------"<<szText<<"-------------------------"<<endl;

return dwCpuSpeed;

}

说实话,我在图书馆里看过一本叫《C语言编程实战105例》的一本书,是半年前看的,那里面有相关的代码,但是你要CPU号这种高级的东东就不好办了。我从昨天开始想你的问题。也没有什么进展,就到网上就找了找,发现网上有关于这方面的贴子,但那位高手用的是linux的环境做的,在win下不能运行,

>

我的笨方法:

以/proc/stat为例,它里面的内容如下:(第一行的几个单词,是我为了便于说明,另外标注的)

user nice system idle iowait irq softirq

cpu 65376847 362756 2405159 10834971593 3765180 93399 2395097 0

cpu0 7680302 5263 111909 1355640955 47680 0 185343 0

cpu1 6527638 2261 327795 1356540189 249151 1 24242 0

intr 21259182 122 97003 0 0 0 0 0 0 1 44 0 0 4290639 0 0 0 742540 1330673 0 0 0 0 0 111 173 0 0 0 0 161039 191398 10286 2440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ctxt 42582486

btime 1376534806

processes 346513

procs_running 1

procs_blocked 0

softirq 21851001 2 9105868 18006 318205 256633 2 1384334 1159984 60546 9547421

---------------------------- 分割线------------------------------

说明:

user:从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=001秒

nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)

system:从系统启动开始累计到当前时刻,核心时间(单位:jiffies)

idle:从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)

iowait:从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,

irq:从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)

softirq:从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

CPU时间=user+system+nice+idle+iowait+irq+softirq

-------------------------下面这几项可以不看------------------

intr:第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。

ctxt:自系统启动以来CPU发生的上下文交换的次数。

btime:从系统启动到现在为止的时间,单位为秒。

processes:自系统启动以来所创建的任务的个数目。

procs_running:当前运行队列的任务的数目。

procs_blocked:当前被阻塞的任务的数目。

-----------------------------计算方法-----------------------------

那么CPU利用率可以使用以下两个方法。先取两个采样点,然后计算其差值:

cpu usage=(idle2-idle1)/(cpu2-cpu1)100

cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)100

=============================================

建议:要用C语言来编程实现的话,提取各项数据会比较复杂,而用shell脚本来提取的话,会简单的多;所以你可以尝试用脚本来提取数据并计算出CPU使用率,然后在C程序中用system( )函数来调用这个脚本。

以上就是关于linux下用c语言实现查cpu类型和型号等信息全部的内容,包括:linux下用c语言实现查cpu类型和型号等信息、C语言怎么获取硬件信息【网卡序号。。。】、C语言读取计算机CPU的序列号、硬盘(网卡、机器名)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9527382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存