#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;
}
}
}
}
随机推荐
- fis3解决web网站缓存问题
为什么使用FIS3 项目上线一段时间后如果更新JS或CSS文件,而客户端已经对该文件缓存过了,那就有可能会无法及时更新而继续采用旧的JS或CSS文件,无法达到想要的效果. 处理类似情况最有效的解决方案 ...
- Oracle的服务介绍以及正常运行必须启动的服务
成功安装Oracle 11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现非常卡的状况,通过禁止非必须开启的Oracle服务可以提升电脑的运行速度.那么,具体该怎么做呢? 按照win ...
- Powershell About File System
File System Rights Get-Acl $sharepath | select -expand access | where { !$_.IsInherited -AND $_.file ...
- iOS微信打开App
传统的方式是通过URL Scheme的方式,但是iOS9以后又出了新的更完美的方式Universal Links. 传统的URL Scheme方式微信内置的浏览器都是封锁了所有它投资的公司之外的,只有 ...
- 对opencv.hpp头文件的认识
OpenCV学习笔记(二):对opencv.hpp头文件的认识 - 安东的技术博客 - CSDN博客 https://blog.csdn.net/xidiancoder/article/details ...
- AwesomePerfCpp 性能优化
Contents Talks Articles Sites/Blogs Tools Libraries Books About Talks 2013: Going Native 2013 - Andr ...
- 报错:SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Outline SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trunc ...
- python3 基础数据类型
一.基础数据类型分类 python的数据类型主要包括以下几种: 1.数字 2.字符串 3.列表 4.字典 5.元组 6.集合 1.数字 int 数字主要是用于计算用的,使用方法并不多 #bit_len ...
- Python(数据库之约束表的关系)
一.约束 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: RIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY ...
- Js 实现ajax
一.JS实现的ajax 1.AJAX核心(XMLHttpRequest) 其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象.所有的异步交互都是使用XMLHtt ...