linux下如何获得CPU的信息!

cx820402 2010-11-25 04:26:11
请问linux下,我想在程序中如何得到CPU的信息呢,比如CPU ID,CPU利用率;
还有关机功能,谢谢。
...全文
382 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
沭水河畔 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 laoshizhuce 的回复:]
我觉得可以参考ps程序的实现

网上有coreutils的源代码实现,其中就有ps程序的源代码
[/Quote]
ps命令在procps包裡,至少在我的fc12上是這樣的。
which ps:/bin/ps
rpm -qf /bin/ps: procps-3.2.8-2.fc12.i686
jiangfeng999 2010-11-29
  • 打赏
  • 举报
回复
cat /proc/cpuinfo
laoshizhuce 2010-11-28
  • 打赏
  • 举报
回复
用一个线程不断的读proc下面的文件
Zero0009 2010-11-28
  • 打赏
  • 举报
回复
学习了
c271525290 2010-11-28
  • 打赏
  • 举报
回复
学习了。。。
jihen 2010-11-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cx820402 的回复:]

用system,我总感觉不太好,不太好控制。要不然,我都用system好了。system好像是开一个进程的。

引用 2 楼 lgxwqq111 的回复:

system("cat /proc/cpuinfo")
[/Quote]
是fork了子进程的。
lylyylyyy 2010-11-27
  • 打赏
  • 举报
回复
最简单就是SYSTEM,
方紫涵 2010-11-27
  • 打赏
  • 举报
回复
top
lgch123456 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 justkk 的回复:]

cat /proc/cpuinfo中貌似没有利用率.
[/Quote]这个只是一个静态显示。。但是可以查看动态的心细的 用system调用哪个程序,具体哪个程序 我也忘记了 google下应该就出来了
ddc 2010-11-27
  • 打赏
  • 举报
回复
读proc/uptime和proc/stat文件,下面代码是top.c相关部分,jiffy==>hz那些比较麻烦,其他很简单,自己看吧。
  unsigned long user_j, nice_j, sys_j, other_j;  /* jiffies (clock ticks) */
double up_1, up_2, seconds;
unsigned long jiffies, h;
char buf[80];
int uptime_fd = -1;
int stat_fd = -1;

long smp_num_cpus = sysconf(_SC_NPROCESSORS_CONF);

if(smp_num_cpus<1) smp_num_cpus=1;
do {
int local_n;

FILE_TO_BUF("uptime", uptime_fd);
up_1 = strtod(buf, 0);
FILE_TO_BUF("stat", stat_fd);
sscanf(buf, "cpu %lu %lu %lu %lu", &user_j, &nice_j, &sys_j, &other_j);
FILE_TO_BUF2("uptime", uptime_fd);
up_2 = strtod(buf, 0);
} while((long)( (up_2-up_1)*1000.0/up_1 )); /* want under 0.1% error */

close(uptime_fd);
close(stat_fd);

jiffies = user_j + nice_j + sys_j + other_j;
seconds = (up_1 + up_2) / 2;
h = (unsigned long)( (double)jiffies/seconds/smp_num_cpus );/* actual values used by 2.4 kernels: 32 64 100 128 1000 1024 1200 */
switch(h){
case 30 ... 34 : Hertz = 32; break; /* ia64 emulator */
case 48 ... 52 : Hertz = 50; break;
case 58 ... 62 : Hertz = 60; break;
case 63 ... 65 : Hertz = 64; break; /* StrongARM /Shark */
case 95 ... 105 : Hertz = 100; break; /* normal Linux */
case 124 ... 132 : Hertz = 128; break; /* MIPS, ARM */
case 195 ... 204 : Hertz = 200; break; /* normal << 1 */
case 253 ... 260 : Hertz = 256; break;
case 295 ... 304 : Hertz = 300; break; /* 3 cpus */
case 393 ... 408 : Hertz = 400; break; /* normal << 2 */
case 495 ... 504 : Hertz = 500; break; /* 5 cpus */
case 595 ... 604 : Hertz = 600; break; /* 6 cpus */
case 695 ... 704 : Hertz = 700; break; /* 7 cpus */
case 790 ... 808 : Hertz = 800; break; /* normal << 3 */
case 895 ... 904 : Hertz = 900; break; /* 9 cpus */
case 990 ... 1010 : Hertz = 1000; break; /* ARM */
case 1015 ... 1035 : Hertz = 1024; break; /* Alpha, ia64 */
case 1095 ... 1104 : Hertz = 1100; break; /* 11 cpus */
case 1180 ... 1220 : Hertz = 1200; break; /* Alpha */
default:
/* If 32-bit or big-endian (not Alpha or ia64), assume HZ is 100. */
Hertz = (sizeof(long)==sizeof(int) || htons(999)==999) ? 100UL : 1024UL;
wuzhixuexi 2010-11-27
  • 打赏
  • 举报
回复
top或者fs
justkk 2010-11-27
  • 打赏
  • 举报
回复
cat /proc/cpuinfo中貌似没有利用率.
柴西卡夫卡 2010-11-27
  • 打赏
  • 举报
回复
学习了
wyjkk 2010-11-26
  • 打赏
  • 举报
回复
兄弟,没有什么不太好的,这样做简单实用,而且不会出错。但也看你的用例,如果你要频繁地调用,那确实不妥,如果不那么频繁,没有关系。我想肯定不会频繁调用。

[Quote=引用 3 楼 cx820402 的回复:]
用system,我总感觉不太好,不太好控制。要不然,我都用system好了。system好像是开一个进程的。


引用 2 楼 lgxwqq111 的回复:

system("cat /proc/cpuinfo")
[/Quote]
cx820402 2010-11-26
  • 打赏
  • 举报
回复
用system,我总感觉不太好,不太好控制。要不然,我都用system好了。system好像是开一个进程的。

[Quote=引用 2 楼 lgxwqq111 的回复:]

system("cat /proc/cpuinfo")
[/Quote]
freetstar 2010-11-25
  • 打赏
  • 举报
回复
system("cat /proc/cpuinfo")
laoshizhuce 2010-11-25
  • 打赏
  • 举报
回复
我觉得可以参考ps程序的实现

网上有coreutils的源代码实现,其中就有ps程序的源代码

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧