linux 编程获取内存和cpu使用信息

控制台 输入 :  top -n1     #只运行一次 

Mem: 67972K used, 964840K free, 0K shrd, 1K buff, 5K cached

CPU:  4.3% usr  8.6% sys  0.0% nic 86.9% idle  0.0% io  0.0% irq  0.0% sirq

Load average: 1.16 0.76 0.34 1/80 757

  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND

.........

解析获取信息得到内存和淳朴运行状态

bool GetSystemInfo()

{

   char line[1024];

    FILE* file = popen("top -n1", "r");
    if (NULL == file) {
        return false;
    }

    bool bRet = false;
    if (NULL != fgets(line, 1024, file) ) {
        printf("%s", line);

        int m1, m2, m3, m4, m5;
        int nCount  = sscanf(line, "%*s%u%*s%*s%u%*s%*s%u%*s%*s%u%*s%*s%u%*s\n",
                       &m1, &m2, &m3, &m4, &m5);

        if (NULL != fgets(line, 1024, file) ) {
            printf("%s", line);

            float c1, c2, c3, c4, c5 ,c6, c7;

             nCount  = sscanf(line, "CPU:  %f%% usr  %f%% sys  %f%% nic %f%% idle  %f%% io  %f%% irq  %f%% sirq",
               &c1, &c2, &c3, &c4, &c5, &c6, &c7);
             bRet = true;
        }
    }

    pclose(file);

    return bRet;

}
 

sscanf 返回值为得到的数据个数!

参考:

sscanf_百度百科

sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

第二个参数可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}

注:

1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)

2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

3、width表示读取宽度。

4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。

5、type :这就很多了,就是%s,%d之类。

6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值

失败返回0 ,否则返回格式化的参数个数

7、如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值