#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;
}
}
}
}
随机推荐
- 如何基于Go搭建一个大数据平台
如何基于Go搭建一个大数据平台 - Go中国 - CSDN博客 https://blog.csdn.net/ra681t58cjxsgckj31/article/details/78333775 01 ...
- django--admin模型层
django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查,而使用django admin ...
- 快压、360压缩、WinRAR关于打开快压通过超高压缩比压缩后的文件不兼容的问题
今天接收了同事发过来的一个压缩文件,用360压缩打开和用WinRAR打开压缩文件,傻眼了,这发的是什么鬼压缩包.压缩包的文件大小有27533KB,用360压缩工具解压查看只有121.5kb,而且完全没 ...
- Django - 文件上传、Django组件 - 分页器(paginator)
一.文件上传准备知识 - Content-Type 1.请求头 - Content-Type Content-Type指的是请求体的编码类型,常见的类型共有3种: 1)application/x-ww ...
- is和==的区别以及编码、解码
一.is和==的区别 1,id( ) id( )是python的一个内置函数,通过id( )我们可以查看到一个变量表的值在内存中的地址: s1 = 2 print(id(s1)) # 15143680 ...
- Android---55---Web Service概述
Web Service 是什么? /*w3school*/ Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self-co ...
- linux c编程:互斥锁
们常说互斥锁保护临界区,实际上是说保护临界区中被多个线程或进程共享的数据.互斥锁保证任何时刻只有一个线程在执行其中的代码. 互斥锁具有以下特点: ·原子性:把一个互斥锁定义为一个原子操作,这意味着操作 ...
- SQL SERVER常见等待——解决会话等待产生的系统问题
SQL SERVER——解决会话等待产生的系统问题 转自: https://blog.csdn.net/z_cloud_for_SQL/article/details/55051215 版权声明:SQ ...
- 000 初步使用Kotlin开发Android应用
Kotlin是Jetbrians公司开发的一款编程语言,基于jvm兼容Java. 要求 IDE:IDEA或者Android Studio(简称studio)对Kotlin语言有所了解,官方文档:htt ...
- 在python列表中删除所有空元素
今天在测试数据的时候偶然发现一个问题,如下: test = ['a','','b','','c','',''] for i in test: if i == '': test.remove(i) pr ...