今天忙活了半天,在Linux平台下,总算可以获取到一些性能指标了,结果,Linux上面的数据发送到Windows上面会出现发送为空的现象,可能是Socket套接字存在问题,不搞了。

#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <errno.h> #define SERV_PORT 8888
#define SERV_IP "0.0.0.0" using namespace std; // --------------------------------------------------
float g_cpu_used; typedef struct
{
char name[20];
unsigned int user;
unsigned int nice;
unsigned int system;
unsigned int idle;
} CPU_OCCUPY; typedef struct
{
char Used[32];
char Avg1[32];
char Avg5[32];
char Avg15[32];
} cpu_info; // 得到CPU利用率百分比
void cal_occupy(CPU_OCCUPY *o, CPU_OCCUPY *n)
{
double od, nd;
double id, sd;
double scale;
od = (double)(o->user + o->nice + o->system + o->idle); // 第一次(用户+优先级+系统+空闲)的时间再赋给od
nd = (double)(n->user + n->nice + n->system + n->idle); // 第二次(用户+优先级+系统+空闲)的时间再赋给od
scale = 100.0 / (float)(nd - od); // 100除强制转换(nd-od)之差为float类型再赋给scale这个变量
id = (double)(n->user - o->user); // 用户第一次和第二次的时间之差再赋给id
sd = (double)(n->system - o->system); // 系统第一次和第二次的时间之差再赋给sd
g_cpu_used = ((sd + id)*100.0) / (nd - od); // ((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used
} // 计算CPU差值
void get_occupy(CPU_OCCUPY *o)
{
FILE *fd;
int n;
char buff[1024] = {0};
fd = fopen("/proc/stat", "r");
fgets(buff, sizeof(buff), fd);
sscanf(buff, "%s %u %u %u %u", o->name, &o->user, &o->nice, &o->system, &o->idle);
fclose(fd);
} // 获取CPU利用率并返回字典
char * GetCpuInfo()
{
cpu_info ptr;
CPU_OCCUPY ocpu, ncpu;
char buffer[1024] = {0};
char ref_buffer[4096] = {0}; // 获取cpu使用率
get_occupy(&ocpu);
sleep(1);
get_occupy(&ncpu);
cal_occupy(&ocpu, &ncpu);
sprintf(ptr.Used,"%.2f",g_cpu_used); // 获取系统负载
FILE *pipe = popen("cat /proc/loadavg","r");
fgets(buffer,sizeof(buffer),pipe);
sscanf(buffer,"%s %s %s", ptr.Avg1, ptr.Avg5, ptr.Avg15); // std::cout << "Used = " << ptr.Used << " Avg1 = " << ptr.Avg1 << " Avg5 = " << ptr.Avg5 << " Avg15 = " << ptr.Avg15 << std::endl;
sprintf(ref_buffer, "{ 'platform': 'Centos', 'Used': %s, 'Avg1': %s, 'Avg5': %s, 'Avg15': %s }",ptr.Used, ptr.Avg1, ptr.Avg5, ptr.Avg15);
pclose(pipe);
return ref_buffer;
} // --------------------------------------------------
typedef struct
{
char Total[32];
char Free[32];
char Available[32];
}mem_info; // 获取内存利用率
char * GetMemoryInfo()
{
mem_info ptr;
char buffer[1024] = {0};
char ref_buffer[4096] = {0}; FILE *pipe = popen("cat /proc/meminfo","r"); for(int x=0; x<3; x++)
{
if(x == 0)
{
fgets(buffer,sizeof(buffer),pipe);
sscanf(buffer,"%s %s", ptr.Total, ptr.Total);
}
else if(x == 1)
{
fgets(buffer,sizeof(buffer),pipe);
sscanf(buffer,"%s %s", ptr.Free, ptr.Free);
}
else if(x == 2)
{
fgets(buffer,sizeof(buffer),pipe);
sscanf(buffer,"%s %s", ptr.Available, ptr.Available);
}
} // std::cout << "Total = " << ptr.Total << " Free = " << ptr.Free << " Available = " << ptr.Available << std::endl;
sprintf(ref_buffer,"{ 'platform': 'Centos' , 'Total': %s , 'Free': %s , 'Available': %s }",ptr.Total , ptr.Free, ptr.Available);
pclose(pipe);
return ref_buffer;
} // -------------------------------------------------- typedef struct
{
char none[32];
char mount[128];
char used[32];
}disk_info; char * GetDiskInfo()
{
disk_info ptr;
char buffer[1024] = {0};
char ref_buffer[4096]={0}; FILE *pipe = popen("df","r"); int x=0 , y=0;
strcat(ref_buffer,"{ 'platform': 'Centos', 'value': [ "); for(; fgets(buffer,sizeof(buffer),pipe)!=NULL; y++)
{
char tulp[1024] = {0};
if(y<1)
{
continue;
} sscanf(buffer,"%s %s %s %s %s %s",ptr.none, ptr.none, ptr.none, ptr.none, ptr.used, ptr.mount);
// std::cout << "Used = " << ptr.used << " mount = " << ptr.mount << std::endl; sprintf(tulp,"('%s','%s'),",ptr.mount, ptr.used);
strcat(ref_buffer,tulp);
x++;
}
strcat(ref_buffer," ]}"); std::cout << ref_buffer << std::endl;
pclose(pipe);
return ref_buffer;
} // --------------------------------------------------
char * GetProcessInfo(char *szProcessName)
{
char buffer[1024] = {0};
char ref_buffer[4096]={0}; sprintf(buffer,"ps aux | grep '%s' | grep -v 'grep' | awk {'print $2'}",szProcessName); FILE *pipe = popen(buffer, "r");
char tmp[32]={0}; fgets(tmp,sizeof(tmp),pipe);
if(strlen(tmp)==0)
{
return (char *)"{ 'platform': 'Centos', 'flag':'false' }";
}
else
{
return (char *)"{ 'platform': 'Centos', 'flag':'true' }";
}
} char *GetPing()
{
return "{ 'platform': 'Centos', 'flag':'true' }";
}

C/C++ 实现获取Linux系统参数的更多相关文章

  1. 使用 python 收集获取 Linux 系统主机信息

    使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/env python #encoding: u ...

  2. 使用 python 获取 Linux 的 IP 信息(通过 ifconfig 命令)

    我们可以使用 python 代码通过调用 ifconfig 命令来获取 Linux 主机的 IP 相关信息,包括:网卡名称.MAC地址.IP地址等. 第一种实现方式: #!/usr/bin/pytho ...

  3. 使用 python 获取 Linux 系统信息(通过dmidecode命令)

    通过 dmidecode 命令可以获取到 Linux 系统的包括 BIOS. CPU.内存等系统的硬件信息,这里使用 python 代码来通过调用 dmidecode 命令来获取 Linux 必要的系 ...

  4. 提权后获取linux root密码

    提权后获取linux root密码 2011-09-09 10:45:25     我来说两句      收藏    我要投稿 在webbackdoor本身是root(可能性小的可怜)或通过某漏洞溢出 ...

  5. linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)

    程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...

  6. Java 获取Linux 的IP地址

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  7. 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本、内核、当前时间

    申请博客有一段时间了,然而到现在还一篇没有写过..... 主要因为没有想到需要写些什么,最近在学习Python语言,照着书上看了看最基础的东西,发现根本看不进去,而且光看的话今天看了觉得都理解懂了,过 ...

  8. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

  9. 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取

    本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...

  10. 使用Python收集获取Linux系统主机信息

    爬虫代理IP由芝麻HTTP服务供应商提供 使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/en ...

随机推荐

  1. OUT 啦!你的 App 还不支持一键登录吗?

    在用户使用 App.网站.产品客户端时,是否对于登陆信息的反复输入感到厌烦? 在用户查看信息.打开问卷.收取资源时,是否因为条条框框输入注册信息而放弃使用? 在企业上新产品,宣传推广,迎接新用户时,是 ...

  2. 【HZERO】报表服务

    报表服务 参考文档 https://open.hand-china.com/document-center/doc/component/181/12455?doc_id=10088&_back ...

  3. 【每日一题】3.数学考试 (前缀和,线性DP)

    题目链接:Here 思路:区间求和问题可以想到一个常用算法.前缀和.区间 \([l,r]\) 的和可以用 \(sum_r - sum_l\) 方便求出 由于区间长度 \(k\) 已知,所以我们可以直接 ...

  4. vivo 全球商城:架构演进之路

    本文讲述 vivo 官方商城从单体应用到具备综合能力电商平台的演进,系统架构往服务化.中台化的变迁历程. 一.前言 vivo官方商城,是vivo官方的线上电商平台,主营vivo手机及专属配件.经过几年 ...

  5. App Deploy as Code! SAE & Terraform 实现 IaC 式部署应用

    企业上云是近些年的发展热潮,越来越多的企业把自己的应用部署在各个云厂商中,利用云计算带来的弹性.灵活.安全.低成本等特性,轻松帮助企业搭建自己的应用. 随着企业规模和业务形态的发展,一个应用需要组合多 ...

  6. java读取解析endnote文件

    有些项目中会要求代码解析endnote文献资料获取一些标准的信息,例如XX在某著名期刊上发表了某篇文章,关于发表文章的这个事情的描述就会给坐着一个endnote文件来记录文章名称.作者.期刊名称.出版 ...

  7. freeswitch的事件引擎实现分析

    概述 freeswitch是由事件驱动的,fs内部有各种事件来标识状态的变化包括呼叫的变化.配置的变化.号码的变化等等. 而一个框架内的事件引擎需要实现哪些基本的功能呢? 让我们来看一下fs的事件引擎 ...

  8. oracle数据库锁表后的处理方案

    oracle数据库, 数据库(执行查询语句或存储过程执行)操作,导致表被锁死的情况的解决方案: 一.查看已经锁定的数据库表 select b.owner,b.object_name,a.session ...

  9. java基础-流程控制-day04

    目录 1. if单分支 2. if else 多分支 3. if else双分支 4. 随机生成一定区间的整数 5 switch语句 6. while循环 7. for循环 8. break cont ...

  10. webflux 的使用总结

    本文为博主原创,未经允许不得转载: 1. Servlet 3.0 简介 2. WebFlux 简介 及 特点  3. 基于函数式的 WebFlux 开发 4. webFlux 全局异常 5. webF ...