#include
#include
#include
#include
#include
GtkWidget *window,*table,*tv1,*tv2,*tv3,*tv4;
GtkTextBuffer *tb1,*tb2,*tb3,*tb4;
gchar *getup,*getdown;
void itoa(int num,char buffer[]){
sprintf(buffer,"%ld",num); //此处已修改。
return;
}
//获取下载总字节
long get_down_byte(){
gchar buffer[20];
FILE *fp;
fp=popen(getdown,"r");
fgets(buffer,sizeof(buffer),fp);
pclose(fp);
return atol(buffer);
}
//获取上传总字节
long get_up_byte(){
gchar buffer[20];
FILE *fp;
fp=popen(getup,"r");
fgets(buffer,sizeof(buffer),fp);
pclose(fp);
return atol(buffer);
}
//使得悬浮窗响应鼠标事件
gboolean on_textview_button_press_event(GtkWidget* widget,GdkEventButton* event,
GdkWindowEdge edge){
if (event->type == GDK_BUTTON_PRESS)
{
//判断按下的是否是鼠标左键。
if (event->button == 1){
//使得去除窗口装饰的窗口可以拖曳
gtk_window_begin_move_drag(GTK_WINDOW(gtk_widget_get_toplevel(widget)),
event->button,event->x_root,event->y_root,event->time); }
//判断按下的是否是鼠标右键。
else if(event->button == 3){
gtk_main_quit();
}
}
return FALSE;
}
//实时更新流量显示,隔秒读取一次总传输字节,相减即为网速。
void refresh_data(){
gint u1,u2,d1,d2;
gchar dbuffer[20]={'\0'},ubuffer[20]={'\0'};
while(1){
d1=get_down_byte()/1024;
u1=get_up_byte()/1024;
sleep(1);
d2=get_down_byte()/1024;
u2=get_up_byte()/1024;
itoa(d2-d1,dbuffer);
itoa(u2-u1,ubuffer);
strcat(dbuffer,"KB/s");
strcat(ubuffer,"KB/s");
gdk_threads_enter();
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv4)),dbuffer,-1);
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv2)),ubuffer,-1);
gdk_threads_leave();
}
}
int main(int argc,char *argv[])
{
if(argc!=2){
g_printf("\nUsage: %s
}
getup = g_strconcat("cat /proc/net/dev|grep ",argv[1],"|awk \'{print $10}\'",NULL);
getdown = g_strconcat("cat /proc/net/dev|grep ",argv[1],"|awk \'{print $2}\'",NULL) ;
gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_focus_on_map(GTK_WINDOW(window),FALSE);
gtk_window_set_accept_focus(GTK_WINDOW(window),FALSE);
gtk_window_set_opacity(GTK_WINDOW(window),0.6);
gtk_window_set_skip_taskbar_hint(GTK_WINDOW(window),TRUE);
//使窗口自适应字符长度
gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
//去掉窗口装饰
gtk_window_set_decorated(GTK_WINDOW(window),FALSE);
//保持窗口最前
gtk_window_set_keep_above(GTK_WINDOW(window),TRUE);
//gtk_window_set_default_size(window,60,35);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
table = gtk_table_new( 2,2,TRUE);
//gtk_table_set_row_spacings(GTK_TABLE(table),2);
//gtk_table_set_col_spacings(GTK_TABLE(table),2);
tv1 = gtk_text_view_new_with_buffer(GTK_TEXT_BUFFER(tb1));
tv2 = gtk_text_view_new_with_buffer(GTK_TEXT_BUFFER(tb2));
tv3 = gtk_text_view_new_with_buffer(GTK_TEXT_BUFFER(tb3));
tv4 = gtk_text_view_new_with_buffer(GTK_TEXT_BUFFER(tb4));
gtk_text_view_set_editable(GTK_TEXT_VIEW(tv1),FALSE);
gtk_text_view_set_editable(GTK_TEXT_VIEW(tv2),FALSE);
gtk_text_view_set_editable(GTK_TEXT_VIEW(tv3),FALSE);
gtk_text_view_set_editable(GTK_TEXT_VIEW(tv4),FALSE);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(tv1),FALSE);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(tv2),FALSE);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(tv3),FALSE);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(tv4),FALSE);
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv1)),"上传:",-1);
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv2)),"0 KB/s",-1);
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv3)),"下载:",-1);
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv4)),"0 KB/s",-1);
gtk_table_attach_defaults(GTK_TABLE(table),tv1,0,1,0,1);
gtk_table_attach_defaults(GTK_TABLE(table),tv2,1,2,0,1);
gtk_table_attach_defaults(GTK_TABLE(table),tv3,0,1,1,2);
gtk_table_attach_defaults(GTK_TABLE(table),tv4,1,2,1,2);
gtk_table_set_homogeneous(GTK_TABLE(table),FALSE);
gtk_container_add(GTK_CONTAINER(window),table);
gtk_widget_show_all(window);
g_signal_connect(G_OBJECT(tv1),"button-press-event",G_CALLBACK(on_textview_button_press_event),NULL);
g_signal_connect(G_OBJECT(tv2),"button-press-event",G_CALLBACK(on_textview_button_press_event),NULL);
g_signal_connect(G_OBJECT(tv3),"button-press-event",G_CALLBACK(on_textview_button_press_event),NULL);
g_signal_connect(G_OBJECT(tv4),"button-press-event",G_CALLBACK(on_textview_button_press_event),NULL);
if(!g_thread_supported())
g_thread_init(NULL);
gdk_threads_init();
g_thread_create((GThreadFunc)refresh_data,NULL,FALSE,NULL);
gdk_threads_enter();
gtk_main();
gdk_threads_leave();
return 0;
}
woodprint 于 2012-09-01 11:24:21发表:
你为什么自己写itoa ?
c 语言早就给你写好了啊
Dndr 于 2012-09-01 08:49:08发表:
帮顶