免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1209 | 回复: 0
打印 上一主题 下一主题

conky代码分析-conky.h [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-19 02:19 |只看该作者 |倒序浏览
conky.h
定义了主要的数据部分


/*
* Conky, a system monitor, based on torsmo
*
* This program is licensed under BSD license, read COPYING
*
* $Id: conky.h 757 2006-11-12 06:38:21Z mirrorbox $
*/
#ifndef _conky_h_
#define _conky_h_
#include pthread.h>  //posix 线程头文件
#if defined(HAS_MCHECK_H)
#include mcheck.h>
#endif /* HAS_MCHECK_H */
#include "config.h"
#include sys/utsname.h> //系统名字
#include stdio.h>
#include stdlib.h>
#include string.h>
#include locale.h>
#include langinfo.h> //LANG支持
#include wchar.h>  //宽字节支持头文件
#include sys/param.h>
#if defined(__FreeBSD__)
#include sys/mount.h>
#include sys/ucred.h>
#include fcntl.h>
#include kvm.h>
#endif /* __FreeBSD__ */
#if defined(__FreeBSD__) && (defined(i386) || defined(__i386__))
#include machine/apm_bios.h>
#endif /* __FreeBSD__ */
#ifdef AUDACIOUS
#include "audacious.h"
#endif
#ifdef XMMS2
#include xmmsclient/xmmsclient.h>
#endif
#define TOP_CPU 1  
#define TOP_NAME 2
#define TOP_PID 3
#define TOP_MEM 4
#define TEXT_BUFFER_SIZE 1280   //1280这么大的buffer?
#define P_MAX_SIZE ((TEXT_BUFFER_SIZE * 4) - 2)  
/* maximum size of config TEXT buffer, i.e. below TEXT line. */
#define MAX_USER_TEXT_DEFAULT 16384
#include sys/socket.h> //socket支持头文件
#define ERR(s, varargs...) \  //错误宏
fprintf(stderr, "Conky: " s "\n", ##varargs)
/* critical error */
#define CRIT_ERR(s, varargs...) \
{ fprintf(stderr, "Conky: " s "\n", ##varargs); exit(EXIT_FAILURE); }
struct i8k_struct {
    char *version;
    char *bios;
    char *serial;
    char *cpu_temp;
    char *left_fan_status;
    char *right_fan_status;
    char *left_fan_rpm;
    char *right_fan_rpm;
    char *ac_status;
    char *buttons_status;
};
struct i8k_struct i8k;//i8k是主板的信息,比如主板bios版本,cpu的温度
struct net_stat {
    const char *dev;
    int up;
    long long last_read_recv, last_read_trans;
    long long recv, trans;
    double recv_speed, trans_speed;
    struct sockaddr addr;
    int linkstatus;
    double net_rec[15], net_trans[15];
};//网络的信息
unsigned int diskio_value;
struct fs_stat {
    char *path;
    long long size;
    long long avail;
    long long free;
};//文件系统信息
struct thread_info_s {
    pthread_t thread;
    pthread_mutex_t mutex; //互斥锁
};
struct mail_s {            // for imap and pop3
    unsigned long unseen;
    unsigned long messages;
    unsigned long used;
    unsigned long quota;
    unsigned long port;
    float interval;
    double last_update;
    char host[128];
    char user[128];
    char pass[128];
    char command[1024];
    char folder[128];
    int pos;
    struct thread_info_s thread_info;
    char secure;
} mail;
/*struct cpu_stat {
    unsigned int user, nice, system, idle, iowait, irq, softirq;
    int cpu_avg_samples;
};*/
#ifdef MPD
struct mpd_s {
    char *title;
    char *artist;
    char *album;
    char *status;
    char *random;
    char *repeat;
    char *track;
    char *name;
    char *file;
    int volume;
    unsigned int port;
    char host[128];
    char password[128];
    float progress;
    int bitrate;
    int length;
    int elapsed;
};
#endif
#ifdef XMMS2
struct xmms2_s {
    char* artist;
    char* album;
    char* title;
    char* genre;
    char* comment;
    char* decoder;
    char* transport;
    char* url;
    char* date;
    int tracknr;
    int bitrate;
    unsigned int id;
    int duration;
    int elapsed;
    float size;
    float progress;
    char* status;
};
#endif
#ifdef AUDACIOUS
struct audacious_s {
    audacious_t items; /* e.g. items[AUDACIOUS_STATUS] */
    int runnable; /* used to signal worker thread to stop */
    pthread_t thread; /* worker thread */
    pthread_attr_t thread_attr; /* thread attributes */
    pthread_mutex_t item_mutex; /* mutex for item array */
    pthread_mutex_t runnable_mutex; /* mutex for runnable flag */
};
#endif
#ifdef BMPX
void update_bmpx();
struct bmpx_s {
    char *title;
    char *artist;
    char *album;
    char *uri;
    int bitrate;
    int track;
};
#endif
#ifdef TCP_PORT_MONITOR
#include "libtcp-portmon.h"
#define MIN_PORT_MONITORS_DEFAULT 16
#define MIN_PORT_MONITOR_CONNECTIONS_DEFAULT 256
#endif
enum {
    INFO_CPU = 0,
    INFO_MAIL = 1,
    INFO_MEM = 2,
    INFO_NET = 3,
    INFO_PROCS = 4,
    INFO_RUN_PROCS = 5,
    INFO_UPTIME = 6,
    INFO_BUFFERS = 7,
    INFO_FS = 8,
    INFO_I2C = 9,
    INFO_MIXER = 10,
    INFO_LOADAVG = 11,
    INFO_UNAME = 12,
    INFO_FREQ = 13,
#ifdef MPD
    INFO_MPD = 14,
#endif
    INFO_TOP = 15,
    INFO_WIFI = 16,
    INFO_DISKIO = 17,
    INFO_I8K = 18,
#ifdef TCP_PORT_MONITOR
        INFO_TCP_PORT_MONITOR = 19,
#endif
#ifdef AUDACIOUS
    INFO_AUDACIOUS = 20,
#endif
#ifdef BMPX
    INFO_BMPX = 21,
#endif
#ifdef XMMS2
    INFO_XMMS2 = 22,
#endif
};//一个枚举,实现了分开显示TOP,CPU等信息
#ifdef MPD
#include "libmpdclient.h"
#endif
volatile int g_signal_pending;//信号,静态的?
struct information {
    unsigned int mask;
    struct utsname uname_s;
    char freq[10];
    double uptime;
    /* memory information in kilobytes */
    unsigned long mem, memmax, swap, swapmax;
    unsigned long bufmem, buffers, cached;
    unsigned short procs;
    unsigned short run_procs;
    float *cpu_usage;
    /*    struct cpu_stat cpu_summed; what the hell is this? */
    unsigned int cpu_count;
    unsigned int cpu_avg_samples;
    unsigned int net_avg_samples;
    float loadavg[3];
    int new_mail_count, mail_count;
    struct mail_s* mail;
    int mail_running;
#ifdef MPD
    struct mpd_s mpd;
    mpd_Connection *conn;
#endif
#ifdef XMMS2
    struct xmms2_s xmms2;
    int xmms2_conn_state;
    xmms_socket_t xmms2_fd;
    fd_set xmms2_fdset;
    xmmsc_connection_t *xmms2_conn;
#endif
#ifdef AUDACIOUS
    struct audacious_s audacious;
#endif
#ifdef BMPX
    struct bmpx_s bmpx;
#endif
    struct process *cpu[10];
    struct process *memu[10];
    struct process *first_process;
    unsigned long looped;
#ifdef TCP_PORT_MONITOR
        tcp_port_monitor_collection_t * p_tcp_port_monitor_collection;
#endif
    short kflags; /* kernel settings, see enum KFLAG *///kernel的设置
};
enum {
    KFLAG_IS_LONGSTAT = 0x01, /* set to true if kernel uses "long" format for /proc/stats */
    KFLAG_PROC_IS_THREADS=0x02 /* set to true if kernel shows # of threads for the proc value in sysinfo() call */
/*     KFLAG_NEXT_ONE=0x04 bits 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 available for future use */
     };   //根据kenel的/proc/stats是否采用“long”的格式
#define KFLAG_SETON(a) info.kflags |= a
#define KFLAG_SETOFF(a) info.kflags &= (~a)
#define KFLAG_FLIP(a) info.kflags ^= a
#define KFLAG_ISSET(a) info.kflags & a
int out_to_console;
int top_cpu;
int top_mem;
int use_spacer;
char tmpstring1[TEXT_BUFFER_SIZE];
char tmpstring2[TEXT_BUFFER_SIZE];
#ifdef X11
/* in x11.c *///x11.c的一些设置
#include X11/Xlib.h>
#include X11/Xlib.h>
#include X11/Xatom.h>
#ifdef XFT
#include X11/Xft/Xft.h>//支持XFT与否
#endif
#ifdef HAVE_XDBE
#include X11/extensions/Xdbe.h>//dobulle buffer?
#endif
#define ATOM(a) XInternAtom(display, #a, False)
#ifdef OWN_WINDOW
enum _window_type {
        TYPE_NORMAL = 0,
        TYPE_DESKTOP,
    TYPE_OVERRIDE
};//是台式机,还是笔记本?
enum _window_hints {
    HINT_UNDECORATED = 0,
    HINT_BELOW,
    HINT_ABOVE,
    HINT_STICKY,
    HINT_SKIP_TASKBAR,
    HINT_SKIP_PAGER
};
#define SET_HINT(mask,hint)    (mask |= (1hint))
#define TEST_HINT(mask,hint)    (mask & (1hint))
#endif
struct conky_window {
    Window root,window,desktop;
    Drawable drawable;
    GC gc;
#ifdef HAVE_XDBE
    XdbeBackBuffer back_buffer;
#endif
#ifdef XFT
    XftDraw *xftdraw;
#endif
    int width;
    int height;
#ifdef OWN_WINDOW
    char wm_class_name[256];
    int x;
    int y;
    unsigned int type;
    unsigned long hints;
#endif
};
#ifdef HAVE_XDBE
extern int use_xdbe;
#endif
#ifdef XFT
extern int use_xft;
#endif
extern Display *display;
extern int display_width;
extern int display_height;
extern int screen;
extern int workarea[4];
extern struct conky_window window;
void init_X11();
void init_window(int use_own_window, int width, int height, int set_trans, int back_colour, char * nodename,
         char **argv, int argc);
void create_gc();
void set_transparent_background(Window win);
long get_x11_color(const char *);
#endif /* X11 */
/* in common.c */
/* struct that has all info */
struct information info;
void signal_handler(int);
void reload_config(void);
void clean_up(void);
void update_uname();
double get_time(void);
FILE *open_file(const char *file, int *reported);
void variable_substitute(const char *s, char *dest, unsigned int n);
void format_seconds(char *buf, unsigned int n, long t);
void format_seconds_short(char *buf, unsigned int n, long t);
struct net_stat *get_net_stat(const char *dev);
void update_stuff();
int round_to_int(float f);//把浮点变量转换为整型的
#define SET_NEED(a) need_mask |= 1  (a)
extern unsigned long long need_mask;
extern double current_update_time, last_update_time;
extern int no_buffers;
/* system dependant (in linux.c) */
void update_diskio(void);
void prepare_update(void);
void update_uptime(void);
void update_meminfo(void);
void update_net_stats(void);
void update_wifi_stats(void);
void update_cpu_usage(void);
void update_total_processes(void);
void update_running_processes(void);
void update_i8k(void);
char get_freq( char *, size_t, char *, int, unsigned int );
void get_freq_dynamic( char *, size_t, char *, int );
char get_voltage(char *, size_t, char *, int, unsigned int ); /* ptarjan */
void update_load_average();
int open_i2c_sensor(const char *dev, const char *type, int n, int *div,
         char *devtype);
double get_i2c_info(int *fd, int arg, char *devtype, char *type);
void get_adt746x_cpu( char *, size_t );
void get_adt746x_fan( char *, size_t );
unsigned int get_diskio(void);
int open_acpi_temperature(const char *name);
double get_acpi_temperature(int fd);
void get_acpi_ac_adapter( char *, size_t );
void get_acpi_fan( char *, size_t );
void get_battery_stuff(char *buf, unsigned int n, const char *bat);
void get_ibm_acpi_fan(char *buf, size_t client_buffer_size);
void get_ibm_acpi_temps(void);
void get_ibm_acpi_volume(char *buf, size_t client_buffer_size);
void get_ibm_acpi_brightness(char *buf, size_t client_buffer_size);
void get_cpu_count();
struct ibm_acpi_struct {
    unsigned int temps[8];
};
struct ibm_acpi_struct ibm_acpi;
enum { PB_BATT_STATUS, PB_BATT_PERCENT, PB_BATT_TIME};
void get_powerbook_batt_info(char*, size_t, int);
struct process {
    struct process *next;
    struct process *previous;
    pid_t pid;
    char *name;
    float amount;
    unsigned long user_time;
    unsigned long total;
    unsigned long kernel_time;
    unsigned long previous_user_time;
    unsigned long previous_kernel_time;
    unsigned int vsize;
    unsigned int rss;
    unsigned int time_stamp;
    unsigned int counted;
    unsigned int changed;
    float totalmem;
};//进程的一些信息
void update_top();
void free_all_processes();
struct process *get_first_process();
/* fs-stuff is possibly system dependant (in fs.c) */
void update_fs_stats(void);
struct fs_stat *prepare_fs_stat(const char *path);
void clear_fs_stats(void);
/* in mixer.c */
int mixer_init(const char *);
int mixer_get_avg(int);
int mixer_get_left(int);
int mixer_get_right(int);
/* in mail.c */
extern char *current_mail_spool;
void update_mail_count();
/* in freebsd.c */
#if defined(__FreeBSD__)
kvm_t *kd;
#endif
#if defined(__FreeBSD__) && (defined(i386) || defined(__i386__))
int apm_getinfo(int fd, apm_info_t aip);
char *get_apm_adapter(void);
char *get_apm_battery_life(void);
char *get_apm_battery_time(void);
#endif
/* in mpd.c */
#ifdef MPD
void update_mpd();
#endif
/* in xmms2.c */
#ifdef XMMS2
void update_xmms2();
#endif
/* in hddtemp.c */ //硬盘的温度吧
#ifdef HDDTEMP
int scan_hddtemp(const char *arg, char **dev, char **addr, int *port);
char *get_hddtemp_info(char *dev, char *addr, int port, char *unit);
#endif /* HDDTEMP */
/* in linux.c */
#endif


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/7270/showart_342613.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP