⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callbacks.c

📁 Linux下的GTK系统监视器 v0.1
💻 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 + -