📄 myviewwin3.c
字号:
参数3:指向一个gtk_accel_group的指针。套件在生成菜单时设置 好加速表(accelerator table)。 */ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group); /* 这个函数生成菜单项。把数组里项的数量,数组自身,和菜单项的任 意回调数据依次传递给套件。 */ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); /* 把新的加速组绑定到窗口。 */ gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); if (menubar) /* 最后,返回套件已经创建的菜单栏。 */ *menubar = gtk_item_factory_get_widget (item_factory, "<main>");}/* 创建一个"信息"列表 */GtkWidget * create_list(struct fileinfo *file,int n){ int i; GtkListStore * model; GtkTreeIter iter; GtkCellRenderer *cell; GtkTreeViewColumn *column; GtkWidget *tree_view; GtkWidget *scrolled_window; struct fileinfo *fileline; char *mulu[]={"根目录"," 进程名"," 大小"," 连接文件"," 用户ID", "组ID"," 统计"," 大小 ", " 时间"}; char *mulu1[]={" Name "," State","SleepAVG","Pid"," Mems"," SigQ"}; FILE *fp; char buffer[1024*5]; size_t bytesRead; char *match; int IntCpuRate,key; struct fileinfo *statisc; int user_1,nice_1,sys_1,idle_1,total_1; int user_2,nice_2,sys_2,idle_2,total_2;//if(n==0||n==1||n==2)//{ /* 创建一个新的滚动窗口(scrolled window),只有需要时,滚动条才出现 */ scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); if(n!=0&&n!=2){ model = gtk_list_store_new (7, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING); tree_view = gtk_tree_view_new (); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), tree_view); gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model)); gtk_widget_show (tree_view); } /* 在窗口中添加一些消息 */ if(n==0) { model = gtk_list_store_new (8, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT,G_TYPE_UINT, G_TYPE_UINT,G_TYPE_UINT,G_TYPE_STRING); tree_view = gtk_tree_view_new (); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), tree_view); gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model)); gtk_widget_show (tree_view); for(fileline=file;fileline!=NULL;fileline=fileline->next) { gchar *msg = g_strdup_printf ("%10s",fileline-> dir ); gchar *msg1 = g_strdup_printf("%10s",fileline ->tiaomu); gchar *msg2 = g_strdup_printf("%10s",fileline ->time); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter,0, msg, 1,msg1,2,fileline -> size1,3,fileline -> nlink,4,fileline -> uid,5,fileline -> gid,6,fileline -> size2,7,msg2 ,-1); g_free (msg);g_free (msg1);g_free (msg2); } for(key=0;key<8;key++) { cell = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (mulu[key],cell,"text", key,NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),GTK_TREE_VIEW_COLUMN (column)); } return scrolled_window; }if(n==1){ for(fileline=file;fileline!=NULL;fileline=fileline->next) { gchar *msg = g_strdup_printf ("%s",fileline->tiaomu1); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter,0, msg, -1); g_free (msg); }cell = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Messages",cell,"text", 0,NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (column)); return scrolled_window; }if(n==2){ model = gtk_list_store_new (6, G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING); tree_view = gtk_tree_view_new (); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), tree_view); gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model)); gtk_widget_show (tree_view); for(fileline=file;fileline!=NULL;fileline=fileline->next) { gchar *msg1 = g_strdup_printf ("%s",fileline->tiaomu1); gchar *msg2 = g_strdup_printf ("%s",fileline->tiaomu2); gchar *msg3 = g_strdup_printf ("%s",fileline->tiaomu3); gchar *msg4 = g_strdup_printf ("%s",fileline->tiaomu4); gchar *msg5 = g_strdup_printf ("%s",fileline->tiaomu5); gchar *msg6 = g_strdup_printf ("%s",fileline->tiaomu6); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter,0, msg1,1, msg2,2, msg3,3, msg4,4, msg5,5,msg6,-1); g_free (msg1);g_free (msg2);g_free (msg3);g_free (msg4);g_free (msg5);g_free (msg6); } for(key=0;key<6;key++) { cell = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (mulu1[key],cell,"text", key,NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),GTK_TREE_VIEW_COLUMN (column)); } return scrolled_window; // cell = gtk_cell_renderer_text_new (); // column = gtk_tree_view_column_new_with_attributes (" Name State SleepAVG Pid Mems SigQ",cell,"text", 0,NULL); // gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), // GTK_TREE_VIEW_COLUMN (column)); // return scrolled_window; } if(n==3){ statisc=tongji(); fp = fopen("/proc/stat","r"); if (fp == 0) printf("open /proc/stat file error\n"); bytesRead = fread(buffer, 1, sizeof(buffer),fp); fclose(fp); if (bytesRead == 0 || bytesRead == sizeof(buffer)) printf("readBytes NULL OR large than buffer \n"); buffer[bytesRead] = '\0'; match = strstr (buffer, "cpu"); if (match == NULL) printf("match error\n"); sscanf (match ,"cpu %d %d %d %d", &user_1, &nice_1, &sys_1, &idle_1);/*second read /proc/stat file calculate CPU avg*/ sleep(1); fp = fopen("/proc/stat","r"); if (fp == 0) printf("open /proc/stat file error\n"); bytesRead = fread(buffer, 1, sizeof(buffer),fp); fclose(fp); if (bytesRead == 0 || bytesRead == sizeof(buffer)) printf("readBytes NULL OR large than buffer \n"); buffer[bytesRead] = '\0'; match = strstr (buffer, "cpu"); if (match == NULL) printf("match error\n"); sscanf (match ,"cpu %d %d %d %d", &user_2, &nice_2, &sys_2, &idle_2); total_1 = user_1 + nice_1 + sys_1 + idle_1; total_2 = user_2 + nice_2 + sys_2 + idle_2; IntCpuRate =(int)(((float)((user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1))/(float)(total_2 - total_1) )*100); // printf( " rate :%d%\n",IntCpuRate ); if(!file) { gchar *msg = g_strdup_printf ("CPU信息:\nuser:%10d \nnice: %10d \nsys: %10d \nidle %10d \n rate :%10d%\n,主存信息:\nMemTotal: %dKB\nMemFree: %dKB\nBuffers: %dKB\nCached: %dKBSwapCached: %dKB\nrate: %d%\n",user_1, nice_1, sys_1, idle_1,IntCpuRate ,statisc->tongji[0],statisc->tongji[1],statisc->tongji[2],statisc->tongji[3],statisc->tongji[4],statisc->frequent); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter,0, msg, -1); g_free (msg); }cell = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Messages",cell,"text", 0,NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (column)); return scrolled_window;} }int main( int argc, char *argv[] ){ GtkWidget *window; static GtkWidget *window1; GtkWidget *main_vbox; GtkWidget *sub1_vbox; GtkWidget *box; GtkWidget *menubar; GtkWidget *table; GtkWidget *label; GtkWidget *notebook; GtkWidget *button; GtkWidget *scrolled_window; GtkWidget *vpaned; GtkWidget *list; GtkWidget *text; DIR *dirp; struct dirent *direntp; struct stat statbuf; struct fileinfo * test,*headp,*test1; struct fileinfo *nodehome[4]; char buf[80]; char * read; FILE *fp; static int mark; char *bufferl[4]={"proc文件信息", "主机信息", "进程信息","资源"}; if(stat(argv[1],&statbuf)<0) perror(argv[1]); if((statbuf.st_mode&S_IFMT)==S_IFDIR) nodehome[0]=listcheck(argv[1]); nodehome[1]=readhost(); nodehome[2]=readthread(argv[1]); nodehome[3]=NULL; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete), NULL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_title (GTK_WINDOW (window), "系统监视器"); gtk_widget_set_size_request (GTK_WIDGET (window), 300, 200); main_vbox = gtk_vbox_new (FALSE, 1); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 1); gtk_container_add (GTK_CONTAINER (window), main_vbox); gtk_widget_show (main_vbox); get_main_menu (window, &menubar); gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0); gtk_widget_show (menubar); /* 创建一个新的笔记本,将标签页放在顶部 */ notebook = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (main_vbox),notebook, TRUE, TRUE, 0); gtk_widget_show (notebook); /* 在笔记本后面追加几个页面 */ for (mark = 0;mark < 4; mark++) { vpaned = gtk_vpaned_new (); gtk_widget_show (vpaned); list=create_list( nodehome[mark],mark); gtk_paned_add1 (GTK_PANED (vpaned), list); gtk_widget_show (list); label = gtk_label_new (bufferl[mark]); gtk_notebook_append_page (GTK_NOTEBOOK (notebook),vpaned, label); } button = gtk_button_new_with_label ("关闭"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (delete), "button 1"); gtk_box_pack_end (GTK_BOX(main_vbox), button, FALSE, FALSE, 0); gtk_widget_show (button); gtk_widget_show (window); gtk_main (); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -