都在/proc/ 下面
cpu信息在/proc/cpuinfo
/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的序列号、硬盘(网卡、机器名)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)