180 lines
5.0 KiB
C
180 lines
5.0 KiB
C
/*
|
|
* Copyright (c) 2020 YuQing <384681@qq.com>
|
|
*
|
|
* This program is free software: you can use, redistribute, and/or modify
|
|
* it under the terms of the Lesser GNU General Public License, version 3
|
|
* or later ("LGPL"), as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
* You should have received a copy of the Lesser GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef SYSTEM_INFO_H
|
|
#define SYSTEM_INFO_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
#include <sys/types.h>
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
#include <sys/param.h>
|
|
#include <sys/mount.h>
|
|
#include "common_define.h"
|
|
|
|
#ifdef OS_LINUX
|
|
#include <sys/sysinfo.h>
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef MFSNAMELEN
|
|
#define MFSNAMELEN 16
|
|
#endif
|
|
|
|
#ifndef MNAMELEN
|
|
#define MNAMELEN 128
|
|
#endif
|
|
|
|
typedef struct fast_statfs {
|
|
long f_type; /* type of file system (see below) */
|
|
long f_bsize; /* optimal transfer block size */
|
|
long f_blocks; /* total data blocks in file system */
|
|
long f_bfree; /* free blocks in fs */
|
|
long f_bavail; /* free blocks avail to non-superuser */
|
|
long f_files; /* total file nodes in file system */
|
|
long f_ffree; /* free file nodes in fs */
|
|
#ifdef HAVE_FILE_SYSTEM_ID
|
|
fsid_t f_fsid; /* file system id */
|
|
#endif
|
|
char f_fstypename[MFSNAMELEN]; /* fs type name */
|
|
char f_mntfromname[MNAMELEN]; /* mounted file system */
|
|
char f_mntonname[MNAMELEN]; /* directory on which mounted */
|
|
} FastStatFS;
|
|
|
|
#if defined(OS_LINUX) || defined(OS_FREEBSD)
|
|
struct fast_sysinfo {
|
|
struct timeval boot_time; /* system boot times */
|
|
double loads[3]; /* 1, 5, and 15 minute load averages */
|
|
unsigned long totalram; /* Total usable main memory size */
|
|
unsigned long freeram; /* Available memory size */
|
|
unsigned long sharedram; /* Amount of shared memory */
|
|
unsigned long bufferram; /* Memory used by buffers */
|
|
unsigned long totalswap; /* Total swap space size */
|
|
unsigned long freeswap; /* swap space still available */
|
|
unsigned short procs; /* Number of current processes */
|
|
};
|
|
|
|
typedef struct fast_process_info {
|
|
int field_count; //field count in /proc/$pid/stat
|
|
int pid;
|
|
char comm[128];
|
|
char state;
|
|
int ppid;
|
|
int pgrp;
|
|
int session;
|
|
int tty_nr;
|
|
int tpgid;
|
|
unsigned int flags;
|
|
unsigned long minflt;
|
|
unsigned long cminflt;
|
|
unsigned long majflt;
|
|
unsigned long cmajflt;
|
|
unsigned long utime;
|
|
unsigned long stime;
|
|
long cutime;
|
|
long cstime;
|
|
long priority;
|
|
long nice;
|
|
long num_threads;
|
|
long itrealvalue;
|
|
struct timeval starttime;
|
|
unsigned long vsize;
|
|
long rss;
|
|
unsigned long rsslim;
|
|
unsigned long startcode;
|
|
unsigned long endcode;
|
|
unsigned long startstack;
|
|
unsigned long kstkesp;
|
|
unsigned long kstkeip;
|
|
unsigned long signal;
|
|
unsigned long blocked;
|
|
unsigned long sigignore;
|
|
unsigned long sigcatch;
|
|
unsigned long wchan;
|
|
unsigned long nswap;
|
|
unsigned long cnswap;
|
|
int exit_signal;
|
|
int processor;
|
|
unsigned int rt_priority;
|
|
unsigned int policy;
|
|
unsigned long long delayacct_blkio_ticks;
|
|
unsigned long guest_time;
|
|
long cguest_time;
|
|
} FastProcessInfo;
|
|
#endif
|
|
|
|
/** get system total memory size
|
|
* parameters:
|
|
* mem_size: return the total memory size
|
|
* return: error no, 0 success, != 0 fail
|
|
*/
|
|
int get_sys_total_mem_size(int64_t *mem_size);
|
|
|
|
|
|
/** get system CPU count
|
|
* parameters:
|
|
* return: error no, 0 success, != 0 fail
|
|
*/
|
|
int get_sys_cpu_count();
|
|
|
|
/** get system boot time
|
|
* parameters:
|
|
* uptime: store the up time
|
|
* return: error no, 0 success, != 0 fail
|
|
*/
|
|
int get_boot_time(struct timeval *boot_time);
|
|
|
|
/** get mounted file systems
|
|
* parameters:
|
|
* stats: the stat array
|
|
* size: max size of the array
|
|
* count: return the count of the array
|
|
* return: error no, 0 success, != 0 fail
|
|
*/
|
|
int get_mounted_filesystems(struct fast_statfs *stats,
|
|
const int size, int *count);
|
|
|
|
#if defined(OS_LINUX) || defined(OS_FREEBSD)
|
|
/** get processes
|
|
* parameters:
|
|
* processes: return the processes
|
|
* count: return the count of the processes
|
|
* return: error no, 0 success, != 0 fail
|
|
*/
|
|
int get_processes(struct fast_process_info **processes, int *count);
|
|
|
|
int get_sysinfo(struct fast_sysinfo *info);
|
|
|
|
int get_kernel_version(Version *version);
|
|
|
|
#ifdef OS_LINUX
|
|
int get_device_block_size(const char *device, int *block_size);
|
|
int get_path_block_size(const char *path, int *block_size);
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|