Linux下用来获取各种系统信息的C++类

下面是头文件内容,代码是mooon的一部分,对应的CPP文件请直接浏览:http://code.google.com/p/mooon/source/browse/trunk/common_library/src/sys/info.cpp

#include <vector>
#include "sys/config.h"
SYS_NAMESPACE_BEGIN   

/***
  * 用来获取系统、内核和进程的各类实时信息,如CPU和内存数据
  */
class CInfo
{
public:
    /***
      * 系统当前实时信息
      */
    typedef struct
    {
        long uptime_second;             /* Seconds since boot */
        unsigned long average_load[3];  /* 1, 5, and 15 minute load averages */
        unsigned long ram_total;        /* Total usable main memory size */
        unsigned long ram_free;         /* Available memory size */
        unsigned long ram_shared;       /* Amount of shared memory */
        unsigned long ram_buffer;       /* Memory used by buffers */
        unsigned long swap_total;       /* Total swap space size */
        unsigned long swap_free;        /* swap space still available */
        unsigned short process_number;  /* Number of current processes */
    }sys_info_t;   

    /***
      * 当前进程时间信息
      */
    typedef struct
    {
        long user_time;             /* user time */
        long system_time;          /* system time */
        long user_time_children;    /* user time of children */
        long system_time_children; /* system time of children */
    }process_time_t;   

    /***
      * 当前系统CPU信息
      */
    typedef struct
    {
        // 单位: jiffies, 1jiffies=0.01秒
        uint64_t total;
        uint32_t user;    /** 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程 */
        uint32_t nice;    /** 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间 */
        uint32_t system;  /** 从系统启动开始累计到当前时刻,处于核心态的运行时间 */
        uint32_t idle;    /** 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间 */
        uint32_t iowait;  /** 从系统启动开始累计到当前时刻,IO等待时间(2.5.41) */
        uint32_t irq;     /** 从系统启动开始累计到当前时刻,硬中断时间(2.6.0) */
        uint32_t softirq; /** 从系统启动开始累计到当前时刻,软中断时间(2.6.0) */
        //uint32_t stealstolen; /** which is the time spent in other operating systems when running in a virtualized environment(2.6.11) */
        //uint32_t guest;       /** which is the time spent running a virtual  CPU  for  guest operating systems under the control of the Linux kernel(2.6.24) */
    }cpu_info_t;   

    /***
      * 当前系统内存信息
      */
    typedef struct
    {
        uint32_t mem_total;
        uint32_t mem_free;
        uint32_t buffers;
        uint32_t cached;
        uint32_t swap_cached;
        uint32_t swap_total;
        uint32_t swap_free;
    }mem_info_t;   

    /***
      * 内核版本号
      */
    typedef struct
    {
        int16_t major;    /** 主版本号 */
        int16_t minor;    /** 次版本号(如果次版本号是偶数,那么内核是稳定版;若是奇数则是开发版) */
        int16_t revision; /** 修订版本号 */
    }kernel_version_t;   

    /***
      * 当时进程状态信息
      *
      * 进程的状态值:
        D    Uninterruptible sleep (usually IO)
        R    Running or runnable (on run queue)
        S    Interruptible sleep (waiting for an event to complete)
        T    Stopped, either by a job control signal or because it is being traced.
        W    paging (not valid since the 2.6.xx kernel)
        X    dead (should never be seen)
        Z    Defunct ("zombie") process, terminated but not reaped by its parent.
      */
    typedef struct
    {
        /** 01 */ pid_t pid;                     /** 进程号,其允许的最大值,请查看/proc/sys/kernel/pid_max */
        /** 02 */ char comm[FILENAME_MAX];       /** 进程的名字,不包括路径 */
        /** 03 */ char state;                    /** 进程的状态 */
        /** 04 */ pid_t ppid;                    /** 父进程号 */
        /** 05 */ pid_t pgrp;                    /** 进程组号 */
        /** 06 */ pid_t session;                 /** 进程会话号 */
        /** 07 */ int tty_nr;                    /** The tty the process uses */
        /** 08 */ pid_t tpgid;                   /** The tty the process uses */
        /** 09 */ unsigned int flags;            /** The kernel flags word of the process (%lu before Linux 2.6.22) */
        /** 10 */ unsigned long minflt;          /** The number of minor faults the process has made which have not required loading a memory page from disk */
        /** 11 */ unsigned long cminflt;         /** The number of minor faults that the process's waited-for children have made */
        /** 12 */ unsigned long majflt;          /** The number of major faults the process has made which have required loading a memory page from disk */
        /** 13 */ unsigned long cmajflt;         /** The number of major faults that the process's waited-for children have made */
        /** 14 */ unsigned long utime;           /** The number of jiffies that this process has been scheduled in user mode */
        /** 15 */ unsigned long stime;           /** The number of jiffies that this process has been scheduled in kernel mode */
        /** 16 */ long cutime;                   /** The  number  of  jiffies that this process's waited-for children have been scheduled in user mode */
        /** 17 */ long cstime;                   /** The number of jiffies that this process's waited-for children have been scheduled in kernel mode */
        /** 18 */ long priority;                 /** The standard nice value, plus fifteen.  The value is never negative in the kernel */
        /** 19 */ long nice;                     /** The nice value ranges from 19 (nicest) to -19 (not nice to others) */
        /** 20 */ long num_threads;              /** Number of threads in this process (since Linux 2.6).  Before kernel 2.6, this field was hard coded to 0 as a placeholder */
        /** 21 */ long itrealvalue;              /** The  time  in  jiffies before the next SIGALRM is sent to the process due to an interval timer.2.6.17, this field is no longer maintained, and is hard coded as 0 */
        /** 22 */ long long starttime;           /** The time in jiffies the process started after system boot */
        /** 23 */ unsigned long vsize;           /** Virtual memory size in bytes */
        /** 24 */ long rss;                      /** Resident Set Size: number of pages the process has in real memory, minus 3 for administrative purposes */
        /** 25 */ unsigned long rlim;            /** Current limit in bytes on the rss of the process (usually 4294967295 on i386) */
        /** 26 */ unsigned long startcode;       /** The address above which program text can run */
        /** 27 */ unsigned long endcode;         /** The address below which program text can run */
        /** 28 */ unsigned long startstack;      /** The address of the start of the stack */
        /** 29 */ unsigned long kstkesp;         /** The current value of esp (stack pointer), as found in the kernel stack page for the process */
        /** 30 */ unsigned long kstkeip;         /** The current EIP (instruction pointer) */
        /** 31 */ unsigned long signal;          /** The bitmap of pending signals */
        /** 32 */ unsigned long blocked;         /** The bitmap of blocked signals */
        /** 33 */ unsigned long sigignore;       /** The bitmap of ignored signals */
        /** 34 */ unsigned long sigcatch;        /** The bitmap of caught signals */
        /** 35 */ unsigned long nswap;           /** Number of pages swapped (not maintained). */
        /** 36 */ unsigned long cnswap;          /** Cumulative nswap for child processes (not maintained) */
        /** 37 */ int exit_signal;               /** Signal to be sent to parent when we die (since Linux 2.1.22) */
        /** 38 */ int processor;                 /** CPU number last executed on (since Linux 2.2.8) */
    }process_info_t;   

    /***
      * 网卡流量数据结构
      */
    typedef struct
    {
        /** 01 */ char interface_name[INTERFACE_NAME_MAX]; /** 网卡名,如eth0 */

                  /** 接收数据 */
        /** 02 */ unsigned long receive_bytes;             /** 此网卡接收到的字节数 */
        /** 03 */ unsigned long receive_packets;
        /** 04 */ unsigned long receive_errors;
        /** 05 */ unsigned long receive_dropped;
        /** 06 */ unsigned long receive_fifo_errors;
        /** 07 */ unsigned long receive_frame;
        /** 08 */ unsigned long receive_compressed;
        /** 09 */ unsigned long receive_multicast;   

                  /** 发送数据 */
        /** 10 */ unsigned long transmit_bytes;             /** 此网卡已发送的字节数 */
        /** 11 */ unsigned long transmit_packets;
        /** 12 */ unsigned long transmit_errors;
        /** 13 */ unsigned long transmit_dropped;
        /** 14 */ unsigned long transmit_fifo_errors;
        /** 15 */ unsigned long transmit_collisions;
        /** 16 */ unsigned long transmit_carrier;
        /** 17 */ unsigned long transmit_compressed;
    }net_info_t;   

    /***
      * 进程页信息结构
      */
    typedef struct
    {
        long size;     /** 程序大小 */
        long resident; /** 常驻内存空间大小 */
        long share;    /** 共享内存页数 */
        long text;     /** 代码段占用内存页数 */
        long lib;      /** 数据/堆栈段占用内存页数 */
        long data;     /** 引用库占用内存页数 */
    }process_page_info_t;   

public:
    /** 获取系统信息,具体请参考sys_info_t的描述 */
    static bool get_sys_info(sys_info_t& sys_info);   

    /** 获取内存信息,具体请参考mem_info_t的描述 */
    static bool get_mem_info(mem_info_t& mem_info);   

    /** 获取总CPU信息,具体请参考cpu_info_t的描述 */
    static bool get_cpu_info(cpu_info_t& cpu_info);   

    /** 获取所有CPU信息,具体请参考cpu_info_t的描述 */
static int get_cpu_info_array(std::vector<cpu_info_t>& cpu_info_array);   

    /** 得到内核版本号 */
    static bool get_kernel_version(kernel_version_t& kernel_version);   

    /** 获取进程信息,具体请参考process_info_t的描述 */
    static bool get_process_info(process_info_t& process_info);   

    /** 获取进程页信息,具体请参考process_page_info_t的描述 */
    static bool get_process_page_info(process_page_info_t& process_page_info);   

    /** 获取进程运行时间数据,具体请参考process_time_t的描述 */
    static bool get_process_times(process_time_t& process_time);   

    /***
      * 获取网卡流量等信息
      * 流量 = (当前获取的值 - 上一时间获取的值) / 两次间隔的时长
      * @interface_name: 网卡名,如eth0等
      * @net_info: 存储网卡流量等数据
      */
    static bool get_net_info(const char* interface_name, net_info_t& net_info);
    static bool get_net_info_array(std::vector<net_info_t>& net_info_array);       

private:
    static bool do_get_net_info_array(const char* interface_name, std::vector<net_info_t>& net_info_array);
};   

SYS_NAMESPACE_END

本文出自 “飞月” 博客,请务必保留此出处http://mooon.blog.51cto.com/1246491/966165

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索进程
, long
, process
, 获取具体时间
, unsigned
, The
获取Linux系统信息
linux系统用来干嘛、linux 获取系统时间、linux c 获取系统时间、linux 获取系统版本、linux 获取系统信息,以便于您获取更多的相关知识。

时间: 2024-12-29 03:44:01

Linux下用来获取各种系统信息的C++类的相关文章

linux下使用perl获取本机ip的几种方法介绍_linux shell

在使用 Gearman 做分布式处理时,各机需要注册一个独立的 job 作为信息反馈,为求方便,Gearman::Worker 脚本 register_function 代码又要通用,于是想到了使用各自的 ip 地址作为 job 命名. 那么怎么在 worker 脚本里获取本机 ip 作为 func 呢? 第一种办法,最简单的,调用 shell: 复制代码 代码如下: $ip = `ifconfig eth0|grep -oE '([0-9]{1,3}\.?){4}'|head -n 1`; 注

CentOS下无法正常获取MySQL数据库表数据的问题

之前,由于客户要求在centOS下安装系统应用,因此有机会接触了一下CentOS,顺便也了解了下CentOS的常规操作,还有在CentOS下的MySQL相关操作. 目前技术框架使用JSF(richfaces.facelets)+Spring+JPA(OpenJPA),不使用数据库依赖的触发器或存储过程,所有业务逻辑在web服务器上执行,因此数据库基本不用考虑移植问题.但是本来在windows下运行正常的系统,在linux下却没法获取一些表的内容.由于数据库的初始化,最初只是体现在几个需要手工维护

linux下用shell脚本启动可执行.jar文件并关闭的方法

话不多说,开始上代码,为了偷懒,代码只是截图了,感兴趣的朋友可以看了之后自己写,这样加深印象. 上面是小弟写的shell脚本.写的不好请见谅. 首先遇到的第一个坑 我在window下写的 然后道linux中执行,在linux死活都说俺的19行有错误,俺就不明白了,哪里有错,问了下别人,也说没错.突然有个高人问我在哪编写的,小弟回答在win下,他告诉俺执行下这个命令: dos2unix server.sh 然后小弟就执行了,说命令不存在,小弟只好安装这个,执行了以下命令 yum install d

linux下通过命令行获取gmail的新邮件

  在这篇文章中,我将为你展示 Linux 命令行的另一个漂亮干练的使用案例:访问 Google 的 Gmail 服务,有需要的小伙伴可以参考下. linux下通过命令行获取gmail的新邮件,不需输入@gmail.com部分 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash   num="33[1;36m" end="33[0m"   read -p "Enter your mail: " name rea

Linux下获取用户主目录的方法分享

  Linux下获取用户主目录的方法分享     方法如下 char *path = getenv("HOME"); printf("path = %sn",path); getenv是标准库函数,包含stdlib.h头文件就可.

如何通过c语言实现Linux下的top命令来获取cpu利用率?

问题描述 如何通过c语言实现Linux下的top命令来获取cpu利用率? 如何通过c语言实现Linux下的top命令来获取cpu利用率?我下载了好几个版本的procps但是在Ubuntu下编译里面的top.c时都出错,求各位大神帮忙解答. 解决方案 linux下用top命令查看cpu利用率超过100%linux下用top命令查看cpu利用率超过100%LINUX下查看CPU使用率的 top 命令 解决方案二: #include <stdio.h>#include <unistd.h>

linux下,做了raid的硬盘,怎么获取smart信息?谢谢!

问题描述 linux下,做了raid的硬盘,怎么获取smart信息?谢谢! 场景:两块硬盘做了raid1,在/dev/下只能看到逻辑盘/dev/sdc.(之前的物理盘是/dev/sda./dev/sdb,做了raid后没了.) 说明:没做raid,可用disktool或者smartctl查看smart信息. 求助:不解除raid,获取硬盘的smart信息. 谢谢!

Linux下获取当前时间到1970年之前某年份的秒数的C代码实现

一.问题描述 在Linux下编写一C程序,用于获取当前时间到1970年之前某年份的秒数. 二.C代码实现 /********************************************************************* * 版权所有 (C)2015, Zhou Zhaoxiong. * * 文件名称:GetSecNumBetweenTwoYear.c * 文件标识:无 * 内容摘要:获取当前时间到1970年之前某时间的秒数 * 其它说明:无 * 当前版本:V1.0 *

linux下获取硬盘使用情况[总结]

1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间的使用情况,根据硬盘的使用情况,就可以判断是否写满了.如果将要写满了,就给出警告.这样就可以避免程序崩溃.首先看一下linux获取硬盘和目录大小的命令,最后总结一下statfs结构和函数. 2.df命令 Linux下可以用df命令获取硬盘的使用情况,通过man可以获取df命令的详细情况.df命令经常