程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Linux下用來獲取各種系統信息的C++類

Linux下用來獲取各種系統信息的C++類

編輯:關於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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved