#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/vfs.h>
#include <sys/time.h>
void response();
void shutdown(char *command); /*关机*/
void cpuinfo_read(); /*cpu相关信息*/
void version_read(); /*内核版本*/
char* meminfo_read(); /*内存使用情况*/
char* stat_read(); /*cpu使用率*/
char* procsum_read(); /*进程数*/
void rest_size_read(); /*磁盘状况*/
void sys_issue_read(); /*操作系统版本*/
gint mem_refresh(gpointer mem_label); /*内存使用情况刷新*/
gint cpu_refresh(gpointer cpu_label); /*cpu使用率刷新*/
gint process_refresh(gpointer process_label); /*进程数刷新*/
gint process_state_refresh(gpointer process_clist); /*进程状态刷新*/
gboolean view_refresh(GtkWidget *widget,gpointer data); /*立即刷新*/
gboolean cpu_callback (GtkWidget *widget,GdkEventExpose *event,gpointer data);
gboolean cpu_record_callback (GtkWidget *widget,GdkEventExpose *event,gpointer data);
gboolean mem_callback (GtkWidget *widget,GdkEventExpose *event,gpointer data);
gboolean mem_record_callback (GtkWidget *widget,GdkEventExpose *event,gpointer data);
void cpu_draw(GtkWidget *widget);
void cpu_record_draw(GtkWidget *widget);
void mem_draw(GtkWidget *widget);
void mem_record_draw(GtkWidget *widget);
void stop_callback(); /*杀死,暂停进程等的回调函数*/
void continue_callback();
void end_callback();
void kill_callback();
gboolean show_help(GtkWidget *widget,gpointer data);
void destroy(GtkWidget*widget,gpointer *data);
static char temp_process[50]; /*进程数*/
static char temp_cpu[50]; /*cpu使用率*/
static char temp_mem[50]; /*内存使用*/
static long idle,total; /*计算cpu时的数据*/
static int flag=0; /*计算cpu使用率时启动程序的标志*/
static int flag1=0; /*计算单个进程cpu使用率时使用的标志*/
static char model_name[50]; /*处理器型号*/
static char cpu_MHz[20]; /*cpu频率*/
static char cache_size[10]; /*cache大小*/
static char issue[30]; /*系统版本*/
static char mkernel[20]; /*内核版本*/
static char free_temp[200];
static long mem_total; /*内存总大小*/
static long mem_free; /*空闲内存*/
static long long ustime[32768]; /*前一次记录的用户态和核心态的总时间*/
static long mtime[32768]; /*前一次记录的时刻*/
static float cpu_used_percent=0; /*cpu使用率*/
static int cpu_start_position=15; /*绘制cpu移动的线条*/
static float cpu_data[66]; /*cpu历史数据*/
static int flag2=0; /*初始化cpu_data数组中数据的标志*/
static int cpu_first_data=0; /*第一个数据,既最早的数据,下一个要淘汰的数据*/
static float mem_data[66]; /*cpu历史数据*/
static int flag3=0; /*初始化cpu_data数组中数据的标志*/
static int mem_first_data=0; /*第一个数据,既最早的数据,下一个要淘汰的数据*/
static int mem_start_position=15; /*绘制内存移动的线条*/
static GtkWidget *cpu_drawing_area;
static GtkWidget *cpu_record_drawing_area;
static GtkWidget *mem_drawing_area;
static GtkWidget *mem_record_drawing_area;
static GtkWidget *stop_item; /*停止进程*/
static GtkWidget *continue_item; /*继续进程*/
static GtkWidget *end_item; /*结束进程*/
static GtkWidget *kill_item; /*杀死进程*/
static GtkWidget *notebook; /*笔记本*/
static GtkWidget *process_clist; /*进程滚动框标题栏*/
static GtkWidget *view_item; /*查看*/
static GtkWidget *about_item; /*关于*/
int main(int argc,char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *menu_bar;
GtkWidget *file_menu;
GtkWidget *root_file_menu; /*文件*/
GtkWidget *exit_item; /*退出*/
GtkWidget *edit_menu;
GtkWidget *root_edit_menu; /*编辑*/
GtkWidget *view_menu;
GtkWidget *root_view_menu; /*查看*/
GtkWidget *shutdown_menu;
GtkWidget *root_shutdown_menu; /*关机*/
GtkWidget *hibernate_item; /*休眠*/
GtkWidget *poweroff_item; /*关闭*/
GtkWidget *reboot_item; /*重启*/
GtkWidget *logout_item; /*注销*/
GtkWidget *switch_user_item; /*切换用户*/
GtkWidget *help_menu;
GtkWidget *root_help_menu; /*帮助*/
GtkWidget *label;
GtkWidget *process; /*进程*/
GtkWidget *process_clist; /*进程滚动框标题栏*/
GtkWidget *systeming; /*系统*/
GtkWidget *capability; /*性能*/
GtkWidget *cpu; /*cpu纵向图*/
GtkWidget *cpu_record; /*cpu曲线图*/
GtkWidget *mem; /*内存纵向图*/
GtkWidget *mem_record; /*内存曲线图*/
GtkWidget *cpu_hbox; /*容纳cpu两个图*/
GtkWidget *mem_hbox; /*容纳mem两个图*/
GtkWidget *process_label; /*进程数*/
GtkWidget *cpu_label; /*cpu使用率*/
GtkWidget *mem_label; /*内存使用情况*/
GtkWidget *system_label; /*系统栏标签*/
gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /*创建窗口*/
gtk_widget_set_size_request(window,400,400); /*设置窗口大小*/
gtk_window_set_title(GTK_WINDOW(window),"任务管理器");
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL); /*设置关闭窗口*/
vbox = gtk_vbox_new(FALSE,0); /*最外层的box*/
gtk_container_add(GTK_CONTAINER(window),vbox);
gtk_widget_show(vbox);
/*************************************************************************************************/
menu_bar = gtk_menu_bar_new(); /*创建菜单栏,并加入主窗口*/
gtk_box_pack_start(GTK_BOX(vbox),menu_bar,FALSE,FALSE,2);
gtk_widget_show(menu_bar);
notebook = gtk_notebook_new();
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook),GTK_POS_TOP);
gtk_box_pack_start(GTK_BOX(vbox),notebook,FALSE,FALSE,0);
gtk_widget_show(notebook);
/*************************************************************************************************/
file_menu = gtk_menu_new(); /*文件菜单*/
exit_item = gtk_menu_item_new_with_label("退出任务管理器(Q)"); /*第一个菜单项*/
gtk_menu_shell_append(GTK_MENU_SHELL(file_menu),exit_item);
g_signal_connect_swapped(G_OBJECT(exit_item),"activate",G_CALLBACK(gtk_main_quit),NULL); /*菜单项的回调函数*/
gtk_widget_show(exit_item);
root_file_menu = gtk_menu_item_new_with_label("文件(F)"); /*绑定到根菜单项*/
gtk_menu_item_set_submenu(GTK_MENU_ITEM(root_file_menu),file_menu);
gtk_widget_show(root_file_menu);
/************************************************************************************************/
edit_menu = gtk_menu_new(); /*编辑菜单*/
stop_item = gtk_menu_item_new_with_label("停止进程(S)"); /*第一个菜单项*/
gtk_menu_shell_append(GTK_MENU_SHELL(edit_menu),stop_item);
g_signal_connect_swapped(G_OBJECT(stop_item),"activate",G_CALLBACK(stop_callback),NULL); /*菜单项的回调函数*/
gtk_widget_show(stop_item);
continue_item = gtk_menu_item_new_with_label("继续进程(C)"); /*第二个菜单项*/
gtk_menu_shell_append(GTK_MENU_SHELL(edit_menu),continue_item);
g_signal_connect_swapped(G_OBJECT(continue_item),"activate",G_CALLBACK(continue_callback),NULL); /*菜单项的回调函数*/
gtk_widget_show(continue_item);
end_item = gtk_menu_item_new_with_label("结束进程(P)"); /*第三个菜单项*/
gtk_menu_shell_append(GTK_MENU_SHELL(edit_menu),end_item);
g_signal_connect_swapped(G_OBJECT(end_item),"activate",G_CALLBACK(end_callback),NULL); /*菜单项的回调函数*/
gtk_widget_show(end_item);
kill_item = gtk_menu_item_new_with_label("杀死进程(K)"); /*第四个菜单项*/
gtk_menu_shell_append(GTK_MENU_SHELL(edit_menu),kill_item);
g_signal_connect_swapped(G_OBJECT(kill_item),"activate",G_CALLBACK(kill_callback),NULL); /*菜单项的回调函数*/
gtk_widget_show(kill_item);
root_edit_menu = gtk_menu_item_new_with_label("编辑(E)");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(root_edit_menu),edit_menu);
gtk_widget_show(root_edit_menu);
/*************************************************************************************************/
view_menu = gtk_menu_new(); /*查看菜单*/
root_view_menu = gtk_menu_item_new_with_label("查看(V)");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(root_view_menu),view_menu);
gtk_widget_show(root_view_menu);
view_item = gtk_menu_item_new_with_label("立即刷新(R)");
gtk_menu_shell_append(GTK_MENU_SHELL(view_menu),view_item);
g_signal_connect_swapped(G_OBJECT(view_item),"activate",G_CALLBACK(view_refresh),NULL); /*菜单项的回调函数*/
gtk_widget_show(view_item);
/*********************************************************************************************