linux工作管理員

來源:互聯網
上載者:User

在redhat2.4.20-8下編譯通過:

由於本程式視窗部分由glad工具編製,原始碼不易貼出,現只給出部分回呼函數的代碼:

1,“退出”按鈕回呼函數:

void
on_button9_clicked                      (GtkButton        *button,
                                         gpointer          user_data)
{
gtk_main_quit();
}

2,“關機”按鈕回呼函數:

void
on_button10_clicked                     (GtkButton        *button,
                                         gpointer          user_data)
{
system("halt");
}

3,“重新啟動”按鈕回呼函數:

void
on_button11_clicked                     (GtkButton        *button,
                                         gpointer          user_data)
{
system("reboot");
}

4,“主機名稱”字元塊回呼函數:

void
on_label38_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{
FILE * fp;
char buf[256];
fp=fopen("/proc/sys/kernel/hostname","r");
fgets(buf,256,fp);
fclose(fp);
gtk_label_set_text(widget,buf);
}

5,“CPU型號”字元塊回呼函數:

void
on_label45_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{

FILE * fp;
int i,j=0;
char buf[256],buf1[256];
    fp=fopen("/proc/cpuinfo","r");
for(i=0;i<5;i++){
   fgets(buf,256,fp);
}
for(i=0;i<256;i++){
   if(buf[i]==':') break;
}
i+=2;
for(;i<256;i++){
   if(buf[i]==' ') break;
}
i+=1;
while(i<256){
   if(buf[i]==' '){
    i++;
   }
   else{
    buf1[j]=buf[i];
    j++;
    i++;
   }
}
fclose(fp);
   gtk_label_set_text(widget,buf1);//cpu型號
}

6,“CPU主頻”回呼函數:

void
on_label46_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{

FILE * fp;
int i,j=0;
char buf[256],buf1[256];
    fp=fopen("/proc/cpuinfo","r");
for(i=0;i<7;i++){
   fgets(buf,256,fp);
}
for(i=0;i<256;i++){
   if(buf[i]==':') break;
}
i+=2;
j=0;
for(;i<256;i++){
   if(buf[i]==' ') break;
   else{
    buf1[j]=buf[i];
    j++;
   }
}
buf1[j]='/0';
fclose(fp);
   gtk_label_set_text(widget,buf1);//cpu型號
}

7,“系統版本號碼”回呼函數:

void
on_label39_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{
FILE * fp;
char buf[256];
fp=fopen("/proc/sys/kernel/osrelease","r");
fgets(buf,256,fp);
fclose(fp);
gtk_label_set_text(widget,buf);
}

8,“系統已耗用時間”回呼函數:

void timeout_label40 (GtkWidget *widget,gpointer user_data){

FILE * fp;
int i,j;
char buf[64],buf1[64];
fp=fopen("/proc/uptime","r");
fgets(buf,64,fp);
j=0;
for(i=0;i<64;i++){
   if(buf[i]==' ') break;
   else {
    buf1[j]=buf[i];
    j++;
   }
}
buf1[j]='/0';
fclose(fp);

gtk_label_set_text(widget,buf1);
}

void
on_label40_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{
gtk_timeout_add(200,timeout_label40,widget);
}

9,“CPU已耗用時間”回呼函數:

void timeout_label42 (GtkWidget *widget,gpointer user_data)
{

FILE * fp;
int i,j;
char buf[64],buf1[64];
fp=fopen("/proc/uptime","r");
fgets(buf,64,fp);
for(i=0;i<64;i++){
   if (buf[i]==' ') break;
}
i++;
j=0;
for(;i<64;i++){
   if(buf[i]==' ') break;
   else {
    buf1[j]=buf[i];
    j++;
   }
}
buf1[j]='//';
buf1[j+1]='0';
fclose(fp);
gtk_label_set_text(widget,buf1);
}

void
on_label42_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{
gtk_timeout_add(200,timeout_label42,widget);
}

10,“記憶體資訊”回呼函數:

void
on_label51_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{
FILE * fp;
int i,j;
char buf[256],buf1[256];
fp=fopen("/proc/meminfo","r");
fgets(buf,256,fp);
fgets(buf,256,fp);
for(i=0;i<256;i++){
   if (buf[i]==':') break;
}
i++;
for(;i<256;i++){
   if (buf[i]!=' ') break;
}
j=0;
for(;i<256;i++){
   if(buf[i]==' ') break;
   else {
    buf1[j]=buf[i];
    j++;
   }
}
buf1[j]='/0';
fclose(fp);
gtk_label_set_text(widget,buf1);
}

11,“SWAP資訊”回呼函數:

void
on_label53_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{
FILE * fp;
int i,j;
char buf[256],buf1[256];
fp=fopen("/proc/meminfo","r");
fgets(buf,256,fp);
fgets(buf,256,fp);
fgets(buf,256,fp);
for(i=0;i<256;i++){
   if (buf[i]==':') break;
}
i++;
for(;i<256;i++){
   if (buf[i]!=' ') break;
}
j=0;
for(;i<256;i++){
   if(buf[i]==' ') break;
   else {
    buf1[j]=buf[i];
    j++;
   }
}
buf1[j]='/0';
fclose(fp);
gtk_label_set_text(widget,buf1);
}

12,“記憶體使用量資訊”回呼函數:

void timeout_label52 (GtkWidget   *widget,gpointer user_data)
{
FILE * fp;
int i,j;
char buf[256],buf1[256];
fp=fopen("/proc/meminfo","r");
fgets(buf,256,fp);
fgets(buf,256,fp);
for(i=0;i<256;i++){
   if (buf[i]==':') break;
}
i++;
for(;i<256;i++){
   if (buf[i]!=' ') break;
}
for(;i<256;i++){
   if (buf[i]==' ') break;
}
for(;i<256;i++){
   if (buf[i]!=' ') break;
}
j=0;
for(;i<256;i++){
   if(buf[i]==' ') break;
   else {
    buf1[j]=buf[i];
    j++;
   }
}
buf1[j]='/0';
fclose(fp);
gtk_label_set_text(widget,buf1);
}
void
on_label52_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{
gtk_timeout_add(200,timeout_label52,widget);
}

13,“SWAT使用資訊”回呼函數:

void timeout_label54 (GtkWidget *widget, gpointer user_data)
{
FILE * fp;
int i,j;
char buf[256],buf1[256];
fp=fopen("/proc/meminfo","r");
fgets(buf,256,fp);
fgets(buf,256,fp);
fgets(buf,256,fp);
for(i=0;i<256;i++){
   if (buf[i]==':') break;
}
i++;
for(;i<256;i++){
   if (buf[i]!=' ') break;
}
for(;i<256;i++){
   if (buf[i]==' ') break;
}
for(;i<256;i++){
   if (buf[i]!=' ') break;
}
j=0;
for(;i<256;i++){
   if(buf[i]==' ') break;
   else {
    buf1[j]=buf[i];
    j++;
   }
}
buf1[j]='/0';
fclose(fp);
gtk_label_set_text(widget,buf1);
}

void
on_label54_realize                      (GtkWidget        *widget,
                                         gpointer          user_data)
{
gtk_timeout_add(200,timeout_label54,widget);
}

14,“進程顯示”函數(此函數寫在main.c中):

void procc_see(GtkWidget * window)
{
   GtkWidget *widget,*view;
   GtkTextBuffer * buffer;
   FILE *fp;
   GtkTextIter p;
   int i;
   char *buf=malloc(2048*sizeof(char));

   fp=popen("ps -l -x","r");
   /*for(i=0;i<12288;i++)
   {
     fscanf(fp,"%c",&buf[i]);
     if(buf[i]=='/0')break;
   }
   view = lookup_widget(window,"textview1");
   buffer=gtk_text_buffer_new(NULL);
  gtk_text_view_set_buffer(GTK_TEXT_VIEW(view), buffer);
   gtk_text_buffer_set_text(buffer,buf,-1);*/

   widget=lookup_widget(window,"textview1");
   buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
   buffer = gtk_text_buffer_new(gtk_text_buffer_get_tag_table(buffer));
  gtk_text_view_set_buffer(GTK_TEXT_VIEW(widget), buffer);
   g_object_unref(G_OBJECT(buffer));
   gtk_text_buffer_get_end_iter(buffer, &p);
   while((i = fread(buf, 1, sizeof(buf), fp)) > 0) {
GError *err = NULL;
gsize br, bw;
gchar *text;
if(!(text = g_locale_to_utf8(buf, i, &br, &bw, &err))) {
      g_printerr("Failed locale to UTF-8 conversion: %s/n", err->message);
      g_clear_error(&err);
      break;
}
gtk_text_buffer_insert(buffer, &p, text, bw);
g_free(text);
     }
   pclose(fp);
}

15,“查看系統類別型”回呼函數:和前面“查看系統版本”的回呼函數是一樣的,只不過要用到的檔案不同。

不做贅述。

最後,用命令:./autogen.sh和make install 編譯。

說明:此進程管理器實現的功能較少,不過,用此模式編寫的程式很容易擴充,主要是回呼函數的編寫,相關內容請查看有關書籍或Google!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.