lua through c access to CPU and MEM

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>  
#include <time.h>
    
//extern "C" {  
#include "lua.h"    
#include "lualib.h"    
#include "lauxlib.h"    
//    };  
#define CMD "ps -u|grep battle/config.battle >> ./servers/battle/cpumem_battle.txt"
#define CMDEND "servers/battle/config.battle"

int c_getcpumem(lua_State *L){  
    char szTest[1000] = {0};
    char nowCpu[10] = {0};
    char newMem[10] = {0};
    FILE *_fp = fopen("./servers/battle/cpumem_battle.txt","w");
    if(NULL == _fp){
        printf("failed to open\n");
        return 1;
    }
    fclose(_fp);
    system(CMD);
    FILE *fp = fopen("./servers/battle/cpumem_battle.txt","r");
    if(NULL == fp){
        printf("failed to open\n");
        return 1;
    }
    while(!feof(fp)){
        memset(szTest,0,sizeof(szTest));
        fgets(szTest,sizeof(szTest)-1,fp);
        if(strstr(szTest,CMDEND)){
/*
szTest =
zhuk        2144 15.7  0.4 2676720 33788 pts/1   Sl+  10:45   0:35 ./servers/battle/config.battle
*/
            int j = 0;
            int i ;
            int type = 1;
            for(i=0 ; i<100 ; i++){
                if(szTest[i]==' '){
                    j=1;
                    continue;
                }
                else if(j==1){
                    break;
                }
                printf("first_for:szTest[i]=%c,j=%d\n",szTest[i],j);
            }
            for(; i<100 ; i++){
                if(szTest[i]==' '&&type==1){
                    j=0;
                    type = 2;
                    continue;
                }
                if(szTest[i]==' '&&type==2){
                    i=i+2;
                    break;
                }
                nowCpu[j++] = szTest[i];
                printf("szTest[i]=%c,j=%d\n",szTest[i],j);
            }
            nowCpu[j] = '\0';
            printf("nowCpu=%s,j=%d\n",nowCpu,j);
            type = 1;
            for(; i<100 ; i++){
                if(szTest[i]==' '){
                    if(type==1){
                        j=0;
                        type = 2;
                        continue;
                    }else if(type==2){
                        j=0;
                        type = 3;
                        continue;
                    }else{
                        break;
                    }
                }
                newMem[j++] = szTest[i];
                printf("11111szTest[i]=%c,j=%d\n",szTest[i],j);
            }
            newMem[j] ='\0';

            int mem = 0 ;
            if(newMem[j-1] == 'm'){
                sscanf(newMem,"%dm",&mem);
                mem*=1024;
            }else if(newMem[j-1] == 'M'){
                sscanf(newMem,"%dM",&mem);
                mem*=1024;
            }else if(newMem[j-1] == 'g'){
                sscanf(newMem,"%dg",&mem);
                mem=mem*1024*1024;
            }else if(newMem[j-1] == 'G'){
                sscanf(newMem,"%dG",&mem);
                mem=mem*1024*1024;
            }else{
                mem = atoi(newMem);
            }
            lua_pushnumber(L,cpu);
            lua_pushnumber(L,mem);
            break;
        }
    }
    fclose(fp);
    return 2;
}

int luaopen_cpumeminfo(lua_State *L){
    luaL_Reg cpumeminfo [] = {
        {"getcpumem", c_getcpumem},
        {NULL, NULL}
    };
    luaL_checkversion(L);
    luaL_newlib(L, cpumeminfo);
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值