📄 callbacks.c
字号:
#ifdef HAVE_CONFIG_H# include <config.h>#endif#include <gtk/gtk.h>#include "callbacks.h"#include "interface.h"#include "support.h"voidon_toolbutton_quit_clicked (GtkToolButton *toolbutton, gpointer user_data){ gtk_main_quit();}voidon_toolbutton_about_clicked (GtkToolButton *toolbutton, gpointer user_data){ gtk_widget_show(create_aboutdialog());}char cpubuf[30];char verbuf[30];char membuf[30];char ctimebuf[30];char btimebuf[30];char * time_str;void cpu_read(){ char cline[4096]; char buf[50]; int i,j; int counter=0; int fd_info; fd_info=open("/proc/cpuinfo",O_RDONLY); read(fd_info,cline,4096); for(i=0;i<4096;i++){ if (cline[i]==':') counter++; if (counter==5) break; } for(j=0,i;j<50;j++,i++){ buf[j]=cline[i]; } for(j=0;j<=30;j++){ if(buf[j]!='\n') cpubuf[j]=buf[j+1]; else break; } close(fd_info); }void ver_read(){ int fd_info; fd_info=open("/proc/version",O_RDONLY); read(fd_info,verbuf,30);}void mem_read(){ char mline[4096]; int j; int counter=0; int fd_info; fd_info=open("/proc/meminfo",O_RDONLY); read(fd_info,mline,4096); for(j=0;j<=50;j++){ if(mline[j]=='\n') counter++; if(counter<1) membuf[j]=mline[j]; else break; } close(fd_info);}void time_read(){ time_t curtime,uptime_t; int fd; char buf[20]; float uptime,idletime; curtime=time(0); time_str=ctime(&curtime); sprintf(ctimebuf,"CurrentTime:%s",time_str); fd=open("/proc/uptime",O_RDONLY); if(fd < 0) printf("Open failed!\n"); read(fd,buf,20); sscanf(buf,"%f %f",&uptime,&idletime); uptime_t = (time_t)uptime; curtime = curtime-uptime_t; time_str=ctime(&curtime); sprintf(btimebuf,"BootTime:%s",time_str); close(fd); }void get_machine_base_info(GtkWidget* window_main){ gchar * cpu_info; gchar * ver_info; gchar * mem_info; gchar * cur_time_info; gchar * boot_time_info; GtkWidget* clist; clist=lookup_widget(window_main,"clist_info"); gtk_clist_freeze((GtkCList*)clist); gtk_clist_clear((GtkCList *)clist); cpu_read(); cpu_info=cpubuf; gtk_clist_append((GtkCList*)clist,&cpu_info); ver_read();ver_info=verbuf; gtk_clist_append((GtkCList*)clist,&ver_info); mem_read();mem_info=membuf; gtk_clist_append((GtkCList*)clist,&mem_info); time_read();cur_time_info=ctimebuf; gtk_clist_append((GtkCList*)clist,&cur_time_info); boot_time_info=btimebuf; gtk_clist_append((GtkCList*)clist,&boot_time_info); gtk_clist_thaw((GtkCList*)clist);}void Clist_operation(GtkWidget * window_main) // Clist Operator{ GtkWidget * clist; gchar * procinfo[7]; clist=lookup_widget(window_main,"clist_proc"); // get clist_proc from interface gtk_clist_freeze((GtkCList*)clist); gtk_clist_clear((GtkCList *)clist); char buf_stat[LEN],*cmdhead,*cmdtail; int num; // counter for "Proc Amount" int fd_stat; int nr; int pid, tgid, ruid, rgid, prio, policy, rtprio, nice, curcpu, nthreads, sleepavg; count_t utime, stime, starttime; count_t minflt, majflt, size, rss, nswap, startcode, endcode, dskrio=0, dskwio=0, dskrsz=0, dskwsz=0, tcpsnd=0, tcprcv=0, tcpssz=0, tcprsz=0, udpsnd=0, udprcv=0, udpssz=0, udprsz=0, rawsnd=0, rawrcv=0; char command[20],cpid[20],cutime[20],cstime[20],csize[20],crss[20],cstate[20],state; char path_stat[20]; for(num=1;num<32768;num++){ sprintf(path_stat,"/proc/%d/stat",num); if( (fd_stat=open(path_stat,O_RDONLY))<0) continue; // open /proc/xxx/stat & read // fetch pid read(fd_stat,buf_stat,LEN); sscanf(buf_stat,"%d",&pid); // fetch command name cmdhead = strchr(buf_stat,'('); cmdtail = strrchr(buf_stat,')'); if ( (nr = cmdtail-cmdhead-1) > sizeof command) nr = sizeof command; memcpy(command, cmdhead+1, nr); memset(&command[nr], 0, sizeof command - nr); rtprio = policy = 0; nr = sscanf(cmdtail+2, SCANSTAT, &state, &minflt, &majflt, &utime, &stime, &prio, &nice, &starttime, &size, &rss, &startcode, &endcode, &nswap, &curcpu, &rtprio, &policy); close(fd_stat); size=size/1024;rss=rss*4; procinfo[0]=command; sprintf(cpid,"%d",pid); procinfo[1]=cpid; sprintf(cstate,"%c",state); procinfo[2]=cstate; sprintf(cutime,"%lld",utime); procinfo[3]=cutime; sprintf(cstime,"%lld",stime); procinfo[4]=cstime; sprintf(csize,"%lld",size); procinfo[5]=csize; sprintf(crss,"%lld",rss); procinfo[6]=crss; gtk_clist_append((GtkCList*)clist,procinfo); // append to clist } gtk_clist_thaw((GtkCList*)clist);}void Progressbar_operation(GtkWidget * window_main){ GtkWidget *pbar_cpu; GtkWidget *pbar_mem; float cpu_usage,mem_usage; // get the hooks of 2 pbars pbar_cpu = lookup_widget(window_main,"progressbar_cpu"); pbar_mem = lookup_widget(window_main,"progressbar_mem"); // get cpu_usage float total_old,idle_old,total_new,idle_new; FILE *fp; if((fp=fopen("/proc/uptime","r"))==NULL){ printf("can't open file"); exit(-1); } fscanf(fp,"%f",&total_old); fscanf(fp,"%f",&idle_old); fclose(fp); sleep(1); if((fp=fopen("/proc/uptime","r"))==NULL){ printf("can't open file"); exit(-1); } fscanf(fp,"%f",&total_new); fscanf(fp,"%f",&idle_new); fclose(fp); cpu_usage=1-(idle_new-idle_old)/(total_new-total_old); // set pbar_cpu gtk_progress_bar_set_fraction((GtkProgressBar*)pbar_cpu,cpu_usage); // get mem_usage char line[4096],buf[50]; float totalm,freem; int j,flag; int counter=0; int fd_info; fd_info=open("/proc/meminfo",O_RDONLY); read(fd_info,line,4096); for(j=0;j<=50;j++){ if(line[j]=='\n') counter++; if(counter<3) ; else break; } sscanf(line,"MemTotal: %f KB",&totalm);//get "Total Memory" to totalm for(j=0;j<=50;j++){ if(line[j]=='\n'){ flag=j+1;} } for(j=0;j<50;j++,flag++){ buf[j]=line[flag]; } sscanf(buf,"MemFree: %f kB",&freem); close(fd_info); mem_usage= ((totalm-freem)/totalm); // set pbar_mem gtk_progress_bar_set_fraction((GtkProgressBar*)pbar_mem,mem_usage);}voidon_toolbutton_refresh_clicked (GtkToolButton *toolbutton, gpointer window1){ }voidon_window_main_destroy (GtkObject *object, gpointer user_data){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -