#include "syswatcher/CommStringLib.h"
//#include "String16.h"
#undef LOG_TAG
#define LOG_TAG "SysWatcher"
namespace yunos {
using namespace std;
using namespace android;
string readproc(const char* path) {
    ifstream infile(path);
    string message;
    if (infile.is_open()) {
        message = string((std::istreambuf_iterator<char>(infile)),
                (std::istreambuf_iterator<char>()));
        infile.close();
    } else {
        printf("readproc error!");
    }
    return message;
}
bool starts_with(string src, string key) {
    if (src.substr(0, key.size()) == key) {
        return true;
    } else {
        return false;
    }
}
std::string& trim(std::string &s) {
    if (s.empty()) {
        return s;
    }
    s.erase(0, s.find_first_not_of(" "));
    s.erase(s.find_last_not_of(" ") + 1);
    s.erase(0, s.find_first_not_of("\t"));
    s.erase(s.find_last_not_of("\t") + 1);
    return s;
}
string replace(const string& str, const string& src, const string& dest) {
    string ret;
    string::size_type pos_begin = 0;
    string::size_type pos = str.find(src);
    while (pos != string::npos) {
        ret.append(str.data() + pos_begin, pos - pos_begin);
        ret += dest;
        pos_begin = pos + src.size();
        pos = str.find(src, pos_begin);
    }
    if (pos_begin < str.length()) {
        ret.append(str.begin() + pos_begin, str.end());
    }
    return ret;
}
String16 toString16(const string &ret) {
    return String16(ret.c_str());
}
String16 toString16(const char* p) {
    return String16(p);
}
string toString(String16 ret) {
    printf("toString  String16=%s\n", String8(ret.string()).string());
    return string(String8(ret.string()).string());
}
//注意:当字符串为空时,也会返回一个空字符串
void split(std::string& s, std::string const &delim,
        std::vector<std::string>* ret) {
    size_t last = 0;
    size_t index = s.find_first_of(delim, last);
    while (index != std::string::npos) {
        ret->push_back(s.substr(last, index - last));
        last = index + 1;
        index = s.find_first_of(delim, last);
    }
    if (index - last > 0) {
        ret->push_back(s.substr(last, index - last));
    }
}
string transValue(long size) {
    char str[32];
    long kb = 1024;
    long mb = kb * 1024;
    long gb = mb * 1024;
    float f;
    if (size >= gb) {
        sprintf(str, "%.1f GB", (float) size / gb);
    } else if (size >= mb) {
        f = (float) size / mb;
        sprintf(str, (f > 100 ? "%.0f MB" : "%.1f MB"), f);
    } else if (size >= kb) {
        f = (float) size / kb;
        sprintf(str, (f > 100 ? "%.0f KB" : "%.1f KB"), f);
    }
    return string(str);
}
long mykbtoi(string v) { //str= "123 KB"
    int len = v.size() - 3 + 1;
    char * tmp = new char[len];
    string sv = v.substr(0, len - 1);
    memset(tmp, 0, len);
    strcpy(tmp, sv.c_str());
    long size = atoi(tmp);
    delete tmp;
    return size * 1024;
}
string lines2json(std::string& lines, std::string const &delim1, std::vector<
        std::string>const &keys, bool trans, string interface) {
    string delim = string("\n");
    std::vector<std::string> * ret = new vector<string> ();
    Json::Value root;
    split(lines, delim, ret);
    for (std::vector<std::string>::iterator iter = ret->begin(); iter
            != ret->end(); ++iter) {
        *iter = trim(*iter);
        string line = *iter;
        if (keys.size() == 0) {
            std::vector<std::string> * _value0 = new vector<string> ();
            split(line, delim1, _value0);
            if (_value0->size() >= 2) {
                string k = trim(_value0->at(0));
                string v = trim(_value0->at(1));
                if (trans) {
                    long num = mykbtoi(v);
                    v = transValue(num);
                }
                root[k] = v;
            }
            delete _value0;
            continue;
        }
        for (u_int i = 0; i < keys.size(); ++i) {
            if (starts_with(line, keys[i])) {
                std::vector<std::string> * _value = new vector<string> ();
                split(line, delim1, _value);
                if (_value->size() >= 2) {
                    string k = trim(_value->at(0));
                    string v = trim(_value->at(1));
                    if (trans) {
                        long num = mykbtoi(v);
                        v = transValue(num);
                    }
                    root[k] = v;
                }
                delete _value;
            }
        }
    }
    delete ret;
    if (interface != "") {
        root["interface"] = interface;
    }
    string str_json = root.toStyledString();
    return str_json;
}
status_t checkSystem(pid_t status) {
    if (-1 == status) {
        printf("system error!");
        return false;
    } else {
        printf("exit status value=[0x%x]\n", status);
        if (WIFEXITED(status)) {
            if (0 == WEXITSTATUS(status)) {
                printf("run shell script successfully!\n");
                return true;
            } else {
                printf("run shell script fail, script exit code:%d\n",
                        WEXITSTATUS(status));
                return false;
            }
        } else {
            printf("exit status=[%d]\n", WEXITSTATUS(status));
            return false;
        }
    }
}
}

CommStringLib的更多相关文章

随机推荐

  1. .Net Core 知识了解:一跨平台的奥秘

    学习一下.Net Core 查看了技术大拿的文章 .NET Core跨平台的奥秘[上篇]:历史的枷锁 一下是学习资料 对于计算机从业人员来说,“平台(Platform)”是一个我们司空见惯的词语,在不 ...

  2. 【BZOJ3379】[Usaco2004 Open]Turning in Homework 交作业 DP

    [BZOJ3379][Usaco2004 Open]Turning in Homework 交作业 Description     贝茜有C(1≤C≤1000)门科目的作业要上交,之后她要去坐巴士和奶 ...

  3. C# .net 数组倒序排序

    1.数组方法 Array.Sort(Array Array);  此方法为数组的排序(正序)方法 Array.Reverse(Array Array);  此方法可以将数组中的值颠倒 两个方法结合使用 ...

  4. CodeForces 17E Palisection(回文树)

    E. Palisection time limit per test 2 seconds memory limit per test 128 megabytes input standard inpu ...

  5. 只有ReflectionOnlyLoadFrom才可以拯救与GAC冲突的强命名程序集

    先说结论,如果有两个拥有相同程序集名称的强命名程序集,一个在GAC里,一个不在.怎样动态加载那个不在GAC里的程序集?答案就是只有Assembly.ReflectionOnlyLoadFrom才可以加 ...

  6. MAPISession(EventID9646-MS-ExchangeIS)

    查看邮箱登录信息: Get-LogonStatistics jsmith | Sort-Object clientipaddress | Format-Table Get-LogonStatistic ...

  7. FW qunit introduction

    自动化测试软件对于开发来说是一个很重要的工具,而单元测试对于自动化测试来说是基本组成部分:软件的每一个组件或者单元可以在非人工介入的情况下,使用测试工具一遍遍的重复执行.换句话说,就是你可以写一次测试 ...

  8. python装饰器的学习笔记

    此博文是我对装饰器的一些理解,如果有错误欢迎及时留言,我会第一时间向大家学习. 一.什么是装饰器 1.从字面意义来看: 是用来给函数装饰打扮的函数 2.理论上可以理解为: (1).不改变函数的运行方式 ...

  9. tpot从elastic search拉攻击数据之三 用于拉取的java程序

    package download; import org.json.JSONArray; import java.io.*; import java.net.URL; import java.net. ...

  10. MongoDB资料汇总(转)

    原文:MongoDB资料汇总 上一篇Redis资料汇总专题很受大家欢迎,这里将MongoDB的系列资料也进行了简单整理.希望能对大家有用. 最后更新时间:2013-04-22 1.MongoDB是什么 ...