2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  課程設(shè)計(jì)目的</b></p><p>  掌握Linux操作系統(tǒng)的使用方法;</p><p>  了解Linux系統(tǒng)內(nèi)核代碼結(jié)構(gòu);</p><p>  掌握實(shí)例操作系統(tǒng)的實(shí)現(xiàn)方法。</p><p>  培養(yǎng)良好的自學(xué)習(xí)慣和能力。</p><p><b>  

2、課程設(shè)計(jì)內(nèi)容</b></p><p>  1 掌握Linux操作系統(tǒng)的使用方法,包括鍵盤命令、系統(tǒng)調(diào)用;掌握Linux下的編程環(huán)境。</p><p>  編一個(gè)C程序,其內(nèi)容為分窗口同時(shí)顯示三個(gè)并發(fā)進(jìn)程的運(yùn)行結(jié)果。要求用到Linux下的圖形庫。</p><p>  2 掌握Linux下添加設(shè)備驅(qū)動程序的方法。以模塊的方式,實(shí)現(xiàn)一個(gè)虛擬的字符設(shè)備驅(qū)動程序。

3、</p><p>  采用模塊方法,添加一個(gè)新的設(shè)備驅(qū)動程序</p><p>  要求添加字符設(shè)備的驅(qū)動</p><p>  編寫一個(gè)應(yīng)用程序,測試添加的驅(qū)動程序</p><p>  3了解和掌握/proc文件的特點(diǎn)和使用方法</p><p>  了解/proc文件的特點(diǎn)和使用方法;</p><p&

4、gt;  監(jiān)控系統(tǒng)狀態(tài),顯示系統(tǒng)中若干部件使用情況;</p><p>  用圖形界面實(shí)現(xiàn)系統(tǒng)監(jiān)控狀態(tài).</p><p><b>  課程設(shè)計(jì)過程及源碼</b></p><p>  1、 編一個(gè)C程序,其內(nèi)容為分窗口同時(shí)顯示三個(gè)并發(fā)進(jìn)程的運(yùn)行結(jié)果。要求用到Linux下的圖形庫。</p><p>  程序說明:首先是主程序通

5、過fork() 函數(shù)創(chuàng)建新進(jìn)程,然后通過調(diào)用execv 打開新文件以達(dá)到并發(fā)執(zhí)行三個(gè)程序的目的.子程序則使用了GTK 編程,在一個(gè)窗體中放置了一個(gè)進(jìn)度條,加了個(gè)文字標(biāo)簽以改善視覺效果.</p><p><b>  //proc1.c</b></p><p>  #include <gtk/gtk.h></p><p>  #incl

6、ude <string.h></p><p>  typedef struct _ProgressData {</p><p>  GtkWidget *window;</p><p>  GtkWidget *pbar;</p><p>  int timer;</p><p>  gboolean ac

7、tivity_mode;</p><p>  }ProgressData;</p><p>  /*更新進(jìn)度條,使進(jìn)度條的移動*/</p><p>  gint progress_timeout( gpointer data )</p><p><b>  {</b></p><p>  Prog

8、ressData *pdata = (ProgressData *)data;</p><p>  gdouble new_val;</p><p><b>  int v;</b></p><p>  char text[20]="0%";</p><p>  new_val=gtk_progres

9、s_bar_get_fraction(GTK_PROGRESS_BAR(pdata->pbar))+ 0.01;</p><p>  if (new_val > 1.0) </p><p>  new_val = 0.0;</p><p>  v=(int)(new_val*100);</p><p>  strcpy(text,

10、"");</p><p>  sprintf(text,"%d",v);</p><p>  strcat(text," %");</p><p>  gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pdata->pbar),new_val);</p

11、><p>  gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pdata->pbar),text);</p><p>  return TRUE;</p><p><b>  }</b></p><p>  void destroy_progress( GtkWidget *wid

12、get,ProgressData *pdata){ /*退出*/</p><p>  gtk_timeout_remove (pdata->timer);</p><p>  pdata->timer = 0;</p><p>  pdata->window = NULL;</p><p>  g_free (pdata

13、);</p><p>  gtk_main_quit ();</p><p><b>  }</b></p><p>  int main( int argc,char *argv[]){</p><p>  ProgressData *pdata;</p><p>  GtkWidget *

14、align;</p><p>  GtkWidget *separator;</p><p>  GtkWidget *table;</p><p>  GtkWidget *button;</p><p>  GtkWidget *vbox; </p><p>  gtk_init (&argc, &

15、argv);</p><p>  //為傳遞到回調(diào)函數(shù)中的數(shù)據(jù)分配內(nèi)存</p><p>  pdata = g_malloc (sizeof (ProgressData));</p><p>  pdata->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);</p><p>  pdata-&

16、gt;pbar = gtk_progress_bar_new ();</p><p>  pdata->activity_mode= !pdata->activity_mode;</p><p>  gtk_progress_bar_pulse(GTK_PROGRESS_BAR (pdata->pbar));</p><p>  gtk_progr

17、ess_bar_set_fraction(GTK_PROGRESS_BAR(pdata->pbar),0.00);</p><p>  gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pdata->pbar),"0.00");</p><p>  gtk_container_add (GTK_CONTAINER (ali

18、gn), pdata->pbar);</p><p>  gtk_widget_show (pdata->pbar);</p><p>  /* 加一個(gè)定時(shí)器(timer),以更新進(jìn)度條的值*/</p><p>  pdata->timer = gtk_timeout_add (100, progress_timeout, pdata);</

19、p><p>  separator = gtk_hseparator_new ();</p><p>  gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0);</p><p>  gtk_widget_show (separator);</p><p>  table =

20、 gtk_table_new (2, 2, FALSE);</p><p>  gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);</p><p>  gtk_widget_show (table);</p><p>  button = gtk_button_new_with_label (&qu

21、ot;close");</p><p>  g_signal_connect_swapped (G_OBJECT (button), "clicked",</p><p>  G_CALLBACK (gtk_widget_destroy),</p><p>  pdata->window);</p><p>

22、;  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);</p><p>  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);</p><p>  gtk_widget_grab_default (button);</p><p>  gtk_wid

23、get_show (button);</p><p>  gtk_widget_show (pdata->window);</p><p>  gtk_main ();</p><p><b>  return 0;</b></p><p><b>  }</b></p><

24、;p>  //m_proc1.c</p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #include <pthread.h></p><p>  #include <sys/types.h></p

25、><p>  #include <linux/sem.h></p><p>  int semid;</p><p>  char *finish;</p><p>  int p1,p2;</p><p>  int main (void)</p><p><b>  {&l

26、t;/b></p><p>  if((p1=fork())==0)//創(chuàng)建新進(jìn)程</p><p><b>  {</b></p><p>  execv("./p1",NULL);</p><p><b>  }</b></p><p><b

27、>  else</b></p><p><b>  {</b></p><p>  if((p2=fork())==0)</p><p><b>  {</b></p><p><b>  sleep(1);</b></p><p> 

28、 execv("./p2",NULL);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if (fork()==0)</p><p>

29、<b>  {</b></p><p><b>  sleep(2);</b></p><p>  execv("./p3",NULL);//打開文件執(zhí)行</p><p><b>  }</b></p><p><b>  }</b>&

30、lt;/p><p><b>  }</b></p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  運(yùn)行結(jié)果:</b></p><p><b>  2、 字符驅(qū)動

31、程序</b></p><p>  程序說明:對于實(shí)現(xiàn)字符設(shè)備的驅(qū)動,首先要掛載字符設(shè)備,然后加載設(shè)備的驅(qū)動程序,然后再調(diào)用測試程序進(jìn)行測試.我們用insmod來掛載驅(qū)動,然后使用mknod c 設(shè)備名稱 設(shè)備號來分配設(shè)備號,這里c 表示是字符設(shè)備.然后我們可以通過dmesg 查看每一步的進(jìn)展情況.掛載設(shè)備成功后,通過lsmod 來查看所有掛載的設(shè)備,卸載設(shè)備則使用rmmod 設(shè)備號.所有這些完成后便可

32、以開始測試了,編寫測試程序test.c 包含讀設(shè)備和寫設(shè)備.</p><p>  具體操作步驟(在根目錄下執(zhí)行):</p><p><b>  Make</b></p><p>  Insmod mydev.ko //掛載設(shè)備</p><p>  Mknod /dev/mydev c 249 0 //分配設(shè)備號&l

33、t;/p><p>  Gcc –o test test.c //編譯測試程序</p><p>  ./test //運(yùn)行測試程序</p><p>  Rmmod mydev //卸載設(shè)備</p><p>  Rm /dev/mydev //刪除設(shè)備號</p><p>&

34、lt;b>  //Mydev.c</b></p><p>  #include <linux/module.h></p><p>  #include <linux/init.h></p><p>  #include <linux/kernel.h></p><p>  #include

35、 <linux/fs.h></p><p>  #include <linux/types.h></p><p>  #include <asm/uaccess.h></p><p>  MODULE_LICENSE("Dual BSD/GPL");</p><p>  int myde

36、v_major = 0;</p><p>  char *buffer=" ";</p><p>  ssize_t mydev_write (struct file *filp, const char __user *buf, size_t count,loff_t *pos){</p><p><b>  int ret;</

37、b></p><p>  ret=copy_from_user(buffer,buf,count);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  //buf是用戶進(jìn)程空間的一個(gè)地址.但是在mydev_read被調(diào)用時(shí),系統(tǒng)

38、進(jìn)入核心態(tài).</p><p>  //所以不能使用buf這個(gè)地址,必須用copy_to_user,這是kernel提供的一個(gè)函數(shù),用于向用戶傳送數(shù)據(jù).</p><p>  ssize_t mydev_read(struct file *filp, char __user *buf,size_t count, loff_t *pos){</p><p><b&g

39、t;  int ret;</b></p><p>  ret=copy_to_user(buf,buffer,count);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  struct file_operations

40、mydev_fops ={ //系統(tǒng)調(diào)用和驅(qū)動程序關(guān)聯(lián)起來</p><p>  .read = mydev_read,</p><p>  .write = mydev_write,</p><p>  .owner = THIS_MODULE</p><p><b>  };</b></p><p&

41、gt;  int mydev_init(void){</p><p>  if((mydev_major=register_chrdev (0, "mydev", &mydev_fops))>=0){</p><p>  printk("register success!\n");</p><p><b&g

42、t;  return 1;</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  printk("register failed!\n");</p><p><b>  return 0;<

43、/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void mydev_cleanup(void){</p><p>  unregister_chrdev (mydev_major, "mydev");</p

44、><p><b>  }</b></p><p>  module_init(mydev_init);</p><p>  module_exit(mydev_cleanup);</p><p>  //makefile</p><p>  ifneq ($(KERNELRELEASE),)</

45、p><p>  obj-m := mydev.o</p><p><b>  else</b></p><p>  KERNELDIR ?= /lib/modules/$(shell uname -r)/build</p><p>  PWD := $(shell pwd)</p><p><b

46、>  default:</b></p><p>  $(MAKE) -C $(KERNELDIR) M=$(PWD) modules</p><p><b>  endif</b></p><p><b>  install:</b></p><p>  sudo insmod m

47、ydev.ko</p><p><b>  unstall:</b></p><p>  sudo rmmod mydev</p><p><b>  clean:</b></p><p>  rm -rf *.o *.ko .*.cmd *.mod.c .tmp_versions</p>

48、;<p><b>  //test.c</b></p><p>  #include <fcntl.h></p><p>  #include <stdio.h></p><p>  #define MAXBUFF 1024</p><p>  #define DEVICE &quo

49、t;/dev/mydev"</p><p>  int main(void){</p><p>  char buff[MAXBUFF],buff2[MAXBUFF];</p><p><b>  int fd;</b></p><p>  printf("Now driver test beginn

50、ing...\n");</p><p>  printf("Open device...\n");</p><p>  if ((fd=open(DEVICE,O_RDWR))<0){</p><p>  printf("Open device is failed\n");</p><p&g

51、t;<b>  return 1;</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  read(fd,buff,MAXBUFF);</p><p>  printf("the content of de

52、vice is readed:\n%s\n",buff);</p><p>  printf("input something to device whatever you want:\n");</p><p>  scanf("%s",buff);</p><p>  printf("write your

53、 input to device...\n");</p><p>  write(fd,buff,MAXBUFF);</p><p>  read(fd,buff2,MAXBUFF);</p><p>  printf("the content of device is readed again:\n%s\n",buff2);<

54、/p><p><b>  }</b></p><p>  printf("the driver test is ended successful\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p

55、><p><b>  操作界面演示:</b></p><p>  掛載后用 cat /proc/devices 查看分配的設(shè)備號</p><p>  Lsmod查看掛載成功的設(shè)備</p><p>  用測試程序測試掛載的驅(qū)動</p><p>  3、 用GTK做一個(gè)系統(tǒng)監(jiān)視器</p>&

56、lt;p>  程序說明:通過/proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。由于系統(tǒng)的信息是動態(tài)改變的,所以用戶或應(yīng)用程序讀取proc文件時(shí),proc文件系統(tǒng)是動態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的。</p><p>  我們要顯示系統(tǒng)信息,只需進(jìn)行相應(yīng)的文件操作。首先打開相應(yīng)的文件,讀取所需要的信息,將其寫入一個(gè)緩沖區(qū)中,然后將緩沖區(qū)的內(nèi)容加到Gtk的相應(yīng)的控件上面去,最后將控件組合顯示即可。</p

57、><p>  源程序://explorer.c</p><p>  #include<dirent.h></p><p>  #include<fcntl.h></p><p>  #include<signal.h></p><p>  #include<stdio.h>&

58、lt;/p><p>  #include<stdlib.h></p><p>  #include<string.h></p><p>  #include<time.h></p><p>  #include<unistd.h></p><p>  #include<

59、gtk/gtk.h></p><p>  #include<gdk/gdk.h></p><p>  #include<gdk/gdkkeysyms.h></p><p>  #include<sys/stat.h></p><p>  #include<sys/types.h></

60、p><p>  #include<sys/wait.h></p><p>  //系統(tǒng)參數(shù)的數(shù)據(jù)結(jié)構(gòu)</p><p>  typedef struct SYS_PARAMETER {</p><p>  char hostname[22]; //主機(jī)名</p><p>  char kernel_

61、version[33];//內(nèi)核版本</p><p>  char cpu_model[38]; //cpu型號</p><p>  char cpu_mhz[9];//CPU頻率參數(shù)</p><p>  char keep_time[10]; //CPU到目前持續(xù)運(yùn)行時(shí)間</p><p>  char tot

62、al_mem[8];//總內(nèi)存大小</p><p>  char memfree[8]; //空閑內(nèi)存大小</p><p>  char buffers[8]; </p><p>  char cached[8]; //磁盤緩存大小</p><p>  float mem_userate;//內(nèi)存利用率

63、</p><p>  float pre_cpu_use_time; //之前CPU使用的總時(shí)間</p><p>  float pre_cpu_total_time; </p><p>  float now_cpu_use_time; //當(dāng)前CPU使用的總時(shí)間</p><p>  float now_cpu_total_time

64、; </p><p>  } SYS_PARAMETER;</p><p>  //系統(tǒng)進(jìn)程狀態(tài)的結(jié)構(gòu)</p><p>  typedef struct PROCESS_STAT {</p><p>  char * fname; //父進(jìn)程號</p><p>  char * level;

65、 //進(jìn)程優(yōu)先級</p><p>  char * mem_use; //內(nèi)存使用情況</p><p>  struct PROCESS_STAT * next; //指向下一個(gè)進(jìn)程狀態(tài)的指針</p><p>  } PROCESS_STAT;</p><p>  SYS_PARAMETER

66、* sys_parameter = NULL; </p><p>  GtkWidget * main_window; </p><p>  GtkWidget * main_vbox; </p><p>  GtkWidget * main_notebook;

67、 //notebook控件</p><p>  GtkWidget * main_table; //存放notebook的table</p><p>  GtkWidget * main_frame[4]; </p><p>  GtkWidget * process_list;

68、 //進(jìn)程列表</p><p>  GtkWidget * keep_time_label; //顯示系統(tǒng)持續(xù)運(yùn)行時(shí)間的label</p><p>  GtkWidget * time_label; //顯示當(dāng)前時(shí)間的label</p><p>  GtkWidget *

69、pro_num_label;</p><p>  GtkWidget * entry; //進(jìn)程號的輸入框</p><p>  GtkWidget * cpu_use_label; //顯示CPU使用情況的label</p><p>  GtkWidget * mem_use_label

70、; //顯示內(nèi)存使用情況的label</p><p>  GdkPixmap * pixmap = NULL;</p><p>  GtkWidget * drawing_area;</p><p>  GdkPixmap * pixmap1 = NULL;</p><p>  GtkWidget * draw

71、ing_area1;</p><p>  DIR * dir; //要打開的目錄</p><p>  pid_t selected_process; //被選中的進(jìn)程號</p><p>  int selected_row;</p><p>

72、  int pro_num;</p><p>  int is_fresh = 1; //設(shè)置是否刷新進(jìn)程信息</p><p>  int fresh_level = 10; //進(jìn)程信息刷新頻率,即多少秒刷新一次</p><p>  int fresh_time = 0;

73、 //刷新計(jì)時(shí)器</p><p>  int CPU[60]; //用于顯示CPU折線圖的數(shù)組信息</p><p>  int MEM[60]; //用于顯示內(nèi)存折線圖的數(shù)組信息</p><p>  int pro_f

74、lag[32768];</p><p>  void dialog_show(char * title, char * text) {</p><p>  GtkWidget * dialog;</p><p>  GtkWidget * label;</p><p>  dialog = gtk_dialog_new_with_button

75、s(title, GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_NONE, NULL);</p><p>  gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);</p><p>  g_signal_conne

76、ct_swapped(dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog);</p><p>  label = gtk_label_new(text);</p><p>  gtk_widget_show(label);</p><p>  gtk_container_set_b

77、order_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 10);</p><p>  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),label);</p><p>  gtk_widget_show (dialog);</p><p>

78、<b>  }</b></p><p>  //得到當(dāng)前所有進(jìn)程狀態(tài)</p><p>  void get_process_stat() {</p><p>  PROCESS_STAT * p;</p><p>  struct dirent * ptr;</p><p>  char temp

79、[200], tmp[200], pro[20], stat[10], ppid[10];</p><p>  gchar * drink[4];</p><p>  int i, j, fp;</p><p>  p = (PROCESS_STAT *)malloc(sizeof(PROCESS_STAT));</p><p>  dir

80、= opendir("/proc");</p><p>  //循環(huán)讀取/proc目錄下數(shù)字目錄即進(jìn)程目錄,并將對應(yīng)進(jìn)程的部分信息存儲到進(jìn)程信息鏈表中</p><p>  pro_num = 0;</p><p>  while((ptr = readdir(dir)) != NULL) if(isdigit(ptr->d_name[0])

81、 && pro_flag[atoi(ptr->d_name)]) {</p><p>  sprintf(tmp, "/proc/%s/stat\0", ptr->d_name);</p><p>  fp = open(tmp, O_RDONLY);</p><p>  read(fp, temp, 200);<

82、;/p><p>  close(fp);</p><p>  //獲取進(jìn)程的所屬的運(yùn)行程序</p><p><b>  i = 0;</b></p><p>  while(temp[i] != ' ') i++;</p><p><b>  i += 2;</b>

83、;</p><p><b>  j = 0;</b></p><p>  while(temp[i] != ')') {</p><p>  pro[j] = temp[i];</p><p><b>  i++;</b></p><p><b> 

84、 j++;</b></p><p><b>  }</b></p><p>  pro[j] = '\0';</p><p>  drink[3] = pro;</p><p><b>  //獲取進(jìn)程的狀態(tài)</b></p><p><b&g

85、t;  i += 2;</b></p><p><b>  j = 0;</b></p><p>  while(temp[i] != ' ') {</p><p>  stat[j] = temp[i];</p><p><b>  i++;</b></p>

86、<p><b>  j++;</b></p><p><b>  }</b></p><p>  stat[j] = '\0';</p><p>  drink[1] = stat;</p><p>  //獲取進(jìn)程的父進(jìn)程號</p><p>&

87、lt;b>  i++;</b></p><p><b>  j = 0;</b></p><p>  while(temp[i] != ' ') {</p><p>  ppid[j] = temp[i];</p><p><b>  i++;</b></p&

88、gt;<p><b>  j++;</b></p><p><b>  }</b></p><p>  ppid[j] = '\0';</p><p>  drink[2] = ppid;</p><p>  drink[0] = ptr->d_name;<

89、/p><p>  gtk_clist_append((GtkCList *)process_list, drink);//在進(jìn)程列表中添加該進(jìn)程的信息</p><p>  pro_num++;</p><p>  pro_flag[atoi(ptr->d_name)] = 0;</p><p><b>  }</b>&

90、lt;/p><p>  closedir(dir);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  void get_static_SYSPARA(void) {</p><p>  char temp[1000]

91、, * temp1;</p><p>  int i, fp;</p><p><b>  //獲取主機(jī)名</b></p><p>  fp = open("/proc/sys/kernel/hostname", O_RDONLY);</p><p>  read(fp, temp, 200);<

92、;/p><p>  close(fp);</p><p>  for(i = 0; i < 22; i++) sys_parameter->hostname[i] = temp[i];</p><p>  sys_parameter->hostname[21] = 0;</p><p><b>  //獲取內(nèi)核版本&l

93、t;/b></p><p>  fp = open("/proc/version", O_RDONLY);</p><p>  read(fp, temp, 200);</p><p>  close(fp);</p><p><b>  i = 0;</b></p><p&

94、gt;  while(temp[i] != '(') {</p><p>  sys_parameter->kernel_version[i] = temp[i];</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  sys

95、_parameter->kernel_version[i] = 0;</p><p>  //獲取CPU信息存儲到字符串中</p><p>  fp = open("/proc/cpuinfo", O_RDONLY);</p><p>  read(fp, temp, 1000);</p><p>  close(f

96、p);</p><p>  //從字符串中得到CPU型號</p><p>  for(i = 0; i < 38; i++) sys_parameter->cpu_model[i] = temp[i + 79];</p><p>  sys_parameter->cpu_model[37] = 0;</p><p>  //

97、從字符串中得到CPU頻率參數(shù)</p><p>  for(i = 0; i < 9; i++) sys_parameter->cpu_mhz[i] = temp[i + 151];</p><p>  sys_parameter->cpu_mhz[8] = 0;</p><p>  //獲取關(guān)于內(nèi)存的信息</p><p> 

98、 fp = open("/proc/meminfo", O_RDONLY);</p><p>  read(fp, temp, 1000);</p><p>  close(fp);</p><p><b>  //獲取內(nèi)存的大小</b></p><p>  temp1 = strstr(temp,

99、 "MemTotal");</p><p>  for(i = 0; i < 8; i++) sys_parameter->total_mem[i] = temp1[i + 16];</p><p>  sys_parameter->total_mem[7] = 0;</p><p><b>  }</b>

100、</p><p>  read(fp, temp, 200);</p><p>  close(fp);</p><p><b>  i = 0;</b></p><p>  while(temp[i] != '.') {</p><p>  sys_parameter->k

101、eep_time[i] = temp[i];</p><p><b>  i++ ;</b></p><p><b>  }</b></p><p>  sys_parameter->keep_time[i] = 0;</p><p>  //得到CPU當(dāng)前信息的函數(shù),用于求CPU使用率<

102、;/p><p>  fp = open("/proc/stat", O_RDONLY);</p><p>  read(fp, temp, 200);</p><p>  close(fp);</p><p><b>  i = 0;</b></p><p>  while(tem

103、p[i] != ' ') i++;</p><p><b>  i += 3;</b></p><p><b>  j = 0;</b></p><p>  while(temp[i]!= ' ') {//得到USER時(shí)間</p><p>  temp2[j] = t

104、emp[i];</p><p><b>  i++;</b></p><p><b>  j++;</b></p><p><b>  }</b></p><p>  temp2[j] = '\0';</p><p>  user = a

105、toi(temp2);</p><p><b>  j = 0;</b></p><p><b>  i += 2;</b></p><p>  while(temp[i]!= ' ') {//得到SYS時(shí)間</p><p>  temp2[j] = temp[i];</p&g

106、t;<p><b>  i++;</b></p><p><b>  j++;</b></p><p><b>  }</b></p><p>  temp2[j] = '\0';</p><p>  sys = atoi(temp2);</

107、p><p><b>  j = 0;</b></p><p><b>  i++;</b></p><p>  while(temp[i]!= ' ') {//得到NICE時(shí)間</p><p>  temp2[j] = temp[i];</p><p><b

108、>  i++;</b></p><p><b>  j++;</b></p><p><b>  }</b></p><p>  temp2[j] = '\0';</p><p>  nice = atoi(temp2);</p><p>&

109、lt;b>  j = 0;</b></p><p><b>  i++;</b></p><p>  while(temp[i]!= ' ') {//得到IDLE時(shí)間</p><p>  temp2[j] = temp[i];</p><p><b>  i++;</b&

110、gt;</p><p><b>  j++;</b></p><p><b>  }</b></p><p>  temp1 = strstr(temp, "MemFree");</p><p>  for(i = 0; i < 8; i++) sys_parameter

111、->memfree[i] = temp1[i + 16];</p><p>  sys_parameter->memfree[7] = 0;</p><p>  //獲取活動內(nèi)存的大小</p><p>  temp3 = strstr(temp, "Buffers");</p><p>  for(i = 0

112、; i < 8; i++) sys_parameter->buffers[i] = temp3[i + 16];</p><p>  sys_parameter->buffers[7] = 0;</p><p>  //獲取活動內(nèi)存的大小</p><p>  temp4 = strstr(temp, "Cached");<

113、;/p><p>  for(i = 0; i < 8; i++) sys_parameter->cached[i] = temp4[i + 16];</p><p>  sys_parameter->cached[7] = 0;</p><p><b>  //求內(nèi)存利用率</b></p><p>  to

114、tal_mem = atof(sys_parameter->total_mem);</p><p>  active_mem =total_mem - atof(sys_parameter->memfree) - atof(sys_parameter->buffers) - atof(sys_parameter->cached);</p><p>  sys_par

115、ameter->mem_userate = active_mem / total_mem;</p><p><b>  }</b></p><p>  //顯示系統(tǒng)到目前的持續(xù)運(yùn)行時(shí)間</p><p>  void draw_keep_time() {</p><p>  char hs[7] = " h

116、ours ", ms[9] = " minutes ", ss[9] = " seconds "; </p><p>  char temp[3], temp1[3], keep_time_c[35];</p><p><b>  int i, j;</b></p><p>  int keep

117、_time, hour, minute, second;</p><p>  float hour_f, minute_f, second_f;</p><p>  keep_time = atoi(sys_parameter->keep_time);</p><p>  hour = keep_time / 3600; //得到運(yùn)行小時(shí)&

118、lt;/p><p>  keep_time -= 3600 * hour;</p><p>  minute = keep_time / 60; //得到運(yùn)行分鐘</p><p>  second = keep_time % 60; //得到運(yùn)行秒</p><p>  hour_f = (float)hou

119、r; //下面這些工作都是將時(shí)間轉(zhuǎn)化為字符串形式</p><p>  minute_f = (float)minute;</p><p>  second_f = (float)second;</p><p><b>  i = 0;</b></p><p><b>  j = 0;<

120、;/b></p><p>  gcvt(hour_f, 2, temp);//將小時(shí)轉(zhuǎn)換為字符串</p><p>  while(temp[j] != '\0') {</p><p>  keep_time_c[i] = temp[j];</p><p><b>  i++;</b></p

121、><p><b>  j++;</b></p><p><b>  }</b></p><p>  for(j = 0; j < 7; j++, i++) keep_time_c[i] = hs[j];</p><p><b>  j = 0;</b></p>

122、<p>  gcvt(minute_f, 2, temp);</p><p>  while(temp[j] != '\0') {</p><p>  keep_time_c[i] = temp[j];</p><p><b>  i++;</b></p><p><b>  j++;

123、</b></p><p><b>  }</b></p><p>  for(j = 0; j < 9; j++, i++) keep_time_c[i] = ms[j];</p><p><b>  j = 0;</b></p><p>  gcvt(second_f, 2, t

124、emp);</p><p>  while(temp[j] != '\0') {</p><p>  keep_time_c[i] = temp[j];</p><p><b>  i++;</b></p><p><b>  j++;</b></p><p>

125、;<b>  }</b></p><p>  for(j = 0; j < 9; j++, i++) keep_time_c[i] = ss[j];</p><p>  keep_time_c[i] = '\0';</p><p>  gtk_label_set_text((GtkLabel *)keep_time_lab

126、el, keep_time_c);</p><p><b>  }</b></p><p>  gboolean draw_CPU() {</p><p><b>  int i, a;</b></p><p><b>  a = 263;</b></p><

127、;p>  gdk_draw_rectangle(pixmap, drawing_area->style->white_gc, TRUE, 0, 0, drawing_area->allocation.width, drawing_area->allocation.height);</p><p>  gdk_draw_line(pixmap, drawing_area->sty

128、le->black_gc, 264, 52, 264, 2);</p><p>  gdk_draw_line(pixmap, drawing_area->style->black_gc, 13, 52, 268, 52);</p><p>  for(i = 0; i < 6; i++) {</p><p>  gdk_draw_line(

129、pixmap, drawing_area->style->black_gc, 264, 52 - 10 * i, 268, 52 - 10 * i);</p><p><b>  }</b></p><p>  for(i = 59; i > 0; i--) {</p><p>  gdk_draw_line(pixmap,

130、drawing_area->style->black_gc, a, 52 - CPU[i], a - 4, 52 - CPU[i - 1]);</p><p><b>  a -= 4;</b></p><p><b>  }</b></p><p>  gtk_widget_queue_draw(drawin

131、g_area);</p><p>  return TRUE;</p><p><b>  }</b></p><p>  gboolean draw_MEM() {</p><p><b>  int i, a;</b></p><p><b>  a = 263

132、;</b></p><p>  gdk_draw_rectangle(pixmap1, drawing_area1->style->white_gc, TRUE, 0, 0, drawing_area1->allocation.width, drawing_area1->allocation.height);</p><p>  gdk_draw_lin

133、e(pixmap1, drawing_area1->style->black_gc, 264, 52, 264, 2);</p><p>  gdk_draw_line(pixmap1, drawing_area1->style->black_gc, 13, 52, 268, 52);</p><p>  for(i = 0; i < 6; i++) {<

134、;/p><p>  gdk_draw_line(pixmap1, drawing_area1->style->black_gc, 264, 52 - 10 * i, 268, 52 - 10 * i);</p><p><b>  }</b></p><p>  for(i = 59; i > 0; i--) {</p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論