计算机操作系统课设 (3)(000002)_第1页
计算机操作系统课设 (3)(000002)_第2页
计算机操作系统课设 (3)(000002)_第3页
计算机操作系统课设 (3)(000002)_第4页
计算机操作系统课设 (3)(000002)_第5页
已阅读5页,还剩43页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告题目:操作系统课设报告专业班级:信息安全1302班学号:姓名:指导教师:报告日期:2016年3月18日计算机科学与技术学院目录1.课程设计目的12.课程设计内容13.实验内容1 3.1.1.文件拷贝1 3.1.2.分窗口多进程并发4 3.2.增加系统调用7 3.3.实现字符设备驱动10 3.4.系统监视器154.课设体会451. 课程设计目的掌握Linux操作系统的使用方法;了解Linux系统内核代码结构;掌握实例操作系统的实现方法。2. 课程设计内容题目一:掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux下的编程环境。1.编一个C程序,其内容为实现文件拷

2、贝的功能(使用系统调用open/read/write.);2.编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。要求用到Linux下的图形库。 (gtk/Qt)题目二:掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。另编写一个应用程序,使用新增加的系统调用。(1) 内核编译、生成,用新内核启动;(2) 新增系统调用实现:文件拷贝或P、V操作。题目三:掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动程序,其功能可以简单。实现字符设备的驱动题目四:使用GTK/QT实现系统监控器了解/proc文件的特点和使用方法;监控系统状态,显示系统中若干部件使用情况;用图

3、形界面实现系统监控状态。3. 实验内容文件拷贝功能说明:将测试用文件所在目录下的名为“aaa.txt”文件的内容拷贝至该文件夹下“bbb.txt”文件中,若该文件不存在,则创建该文件。设计思路:实现文件拷贝功能,主要用到的函数是open、write、read。由命令行参数获取2个文件名,根据其文件名和路径分别打开两个文件,设置一个循环,将源文件复制到目的文件,直到源文件指针到文件尾,最后关闭两个文件。主要用到的头文件:Unistd.h包含了许多linux系统服务的函数原型,如read、writeFcntl.h定义了很多宏和open、fcntl函数原型Stdio.h标准输入输出头文件Sys/ty

4、pes.h包含适当时应使用的多个基本派生类型Sys/stat.h包含了获取文件属性的一些函数Error.h用于调试错误代码时所需要的一些error变量String.h包含了处理字符串的一些函数源程序:#include <sys/types.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#include <stdio.h>int main(int argc, char* argv)char fblock1024;/

5、设置一个缓冲区int fin, fout, nread;if(argc < 3)printf("argc number wrong!n");exit(0);printf("%sn", argv0);printf("%sn", argv1);printf("%sn", argv2);fin = open(argv1, O_RDONLY);/以只读方式打开文件if(fin < 0)printf("file doesn't exist!");return 0;fout = open

6、(argv2, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);while(nread = read(fin, fblock, sizeof(fblock) > 0)write(fout, fblock, nread);所用函数:open()函数函数定义:int open( const char * pathname,int flags); 参数说明:参数pathname 指向欲打开的文件路径字符串。下列是参数flags 所能使用的标志位:O_RDONLY 以只读方式打开文件O_WRONLY 以只写方式打开文件O_RDWR 以可读写方式打开文件。上述三种标志

7、位是互斥的,也就是不可同时使用,但可与下列的标志位利用OR(|)运算符组合。O_CREAT 若欲打开的文件不存在则自动建立该文件。O_EXCL 如果O_CREAT 也被设置,此指令会去检查文件是否存在。文件若不存在则建立该文件,否则将导致打开文件错误。此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。O_NOCTTY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。O_TRUNC 若文件存在并且以可写的方式打开时,此标志位会令文件长度清为0,而原来存于该文件的资料也会消失。O_APPEND 当读写文件时会从文件尾开始移动,也就是所写

8、入的数据会以附加的方式加入到文件后面。O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。O_NDELAY 同O_NONBLOCK。O_SYNC 以同步的方式打开文件。O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。参数mode 组合此为Linux2.2以后特有的标志位,以避免一些系统安全问题。参数mode 则有下列数种组合,只有在建立新文件时才会生效,此外真正建文件时的权限会受到umask值所影响,因此该文件

9、权限应该为(mode-umaks)。S_IRWXU 00700 权限,代表该文件所有者具有可读、可写及可执行的权限。S_IRUSR 或S_IREAD, 00400权限,代表该文件所有者具有可读取的权限。S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。S_IXUSR 或S_IEXEC, 00100 权限,代表该文件所有者具有可执行的权限。S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。S_IXGR

10、P 00010 权限,代表该文件用户组具有可执行的权限。S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。S_IROTH 00004 权限,代表其他用户具有可读的权限S_IWOTH 00002权限,代表其他用户具有可写入的权限。S_IXOTH 00001 权限,代表其他用户具有可执行的权限。返回值若所有欲核查的权限都通过了检查则返回文件描述符,表示成功,只要有一个权限被禁止则返回-1read()函数函数定义:ssize_t read(int fd, void *buf, size_t count); 参数说明:count是请求读取的字节数,读上来的数据保存在缓冲区buf

11、中,同时文件的当前读写位置向后移。返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。write()函数函数定义:ssize_t write(int fd, void *buf, size_t count); 参数说明:write()会把参数buf所指内存写入count个字节到参数fd所指的文件内。文件读写位置也会随之移动。返回值:如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入error中。分窗口多进程并发功能说明:用gtk实现分窗口同时显示三个并发进程的运行结果设计思路:安装linux下的

12、GTK+:在终端输入sudo apt-get install gnome-core-devel,然后根据提示操作,就会安装libgtk2.0-dev libglib2.0-dev等开发所需的相关库文件。$sudo apt-get install build-essential$sudo apt-get install gnome-core-devel$sudo apt-get install pkg-config$sudo apt-get install libgtk2.0*编译GTK+代码时需要包含的头文件是gtk/gtk.h,此外还需在编译测试文件时使用gcc test.c -o test

13、 pkg-config -cflags -libs gtk+-2.0编写一个GTK+程序的基本步骤如下:1.初始化gtkgtk_init(&argc,&argv);/启动GTKgtk_window_new(GTK_WINDOW_TOPLEVEL);/创建窗口gtk_window_set_title(GTK_WINDOW(window),“标题名”);/设置窗口标题名gtk_widget_set_usize(window,200,200);/设置窗口大小gtk_widget_show(window);/显示窗口2.建立控件gtk_table_new(gint rows,gint

14、columns,gint homogeneous);/创建表格准备封装gtk_container_add(GTK_CONTAINER(window),table);/将表格结合到窗口里gtk_widget_show(table);/显示该表格void gtk_table_attach_defaults(GtkTable*table,GtkWidget*widget,gintleft_attch,gintright_attch,ginttop_attach,gintbottom_attch);/要把物件放在box中3. 登记消息与消息处理函数4. 执行消息循环函数gtk_main()源程序:#i

15、nclude <stdio.h>#include <stdlib.h>#include <sys/types.h>#include<gtk/gtk.h>#include<string.h>GtkWidget *bar,*label,*table,*window;char buf20;GtkWidget *window;GtkWidget *text_view;GtkTextBuffer *buffer;GtkTextIter *Iter;GtkWidget *box;int gtk(int argc,char *argv,char *

16、title)GtkWidget *button;GtkTextIter start,end;gchar *text=title;gtk_init(&argc,&argv); /初始化window=gtk_window_new(GTK_WINDOW_TOPLEVEL); /新建一个窗口gtk_window_set_title(GTK_WINDOW(window),"OS test"); /设置标题gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);/设置大小gtk_window_set_posit

17、ion(GTK_WINDOW(window), GTK_WIN_POS_CENTER);/将窗口设定在显示器中央g_signal_connect(G_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit), NULL);/连接上关闭函数gtk_main_quit;box=gtk_vbox_new(FALSE,0);/创建组装框gtk_widget_show(box);text_view=gtk_text_view_new();/创建文本框构件gtk_container_add(GTK_CONTAINER(window),box

18、);/将组装框中加入窗口构件gtk_box_pack_start(GTK_BOX(box),text_view,FALSE,FALSE,0);/将文本框放在组装框上buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view);/*获得文本框缓冲区*/gtk_container_add(GTK_CONTAINER(window),text_view);gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer),&start,&end);/*获得缓冲区开始和结束位置的Iter*/gtk_t

19、ext_buffer_insert(GTK_TEXT_BUFFER(buffer),&start,text,strlen(text);/*插入文本到缓冲区*/gtk_widget_show(text_view);gtk_widget_show_all(window); gtk_main(); return 0;int main(int argc,char *argv)pid_t pid;pid=fork(); if(!pid) pid=fork(); if(pid>0) gtk(argc,argv,"Process2");/ Process2为Process1

20、的子进程elsegtk(argc,argv,"Process3");/ Process3为 Process2的子进程else if(pid>0) gtk(argc,argv,"Process1");if(pid<0) exit(0); return 0;主要函数函数定义:pid_t fork( void);函数说明:pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中。返回值:若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1。实验过程:1. 文件拷贝在系统

21、主目录文件夹下有“aaa.txt”文件,不存在“bbb.txt”文件,运行filecopy.c 文件之后,“bbb.txt”文件被创建,内容和“aaa.txt”文件内容一样。2. 多窗口进程并发在终端运行1-2.c程序,出现三个并发进程的窗口,分别为“Process1”,“Process2”,“Process3”,其中,Process2为Process1的子进程,Process3为Process2的子进程。3.2 增加系统调用功能说明:通过编译内核方法,增加一个新的进行文件拷贝的系统调用。系统调用号为351,另编写一个应用程序,调用新增加的系统调用。实现的功能是:文件拷贝。实验过程:在kern

22、el的下载网站上下载内核,解压后拷贝到/usr/src目录。对/u进行修改,添加实现文件拷贝功能的源代码。添加的源代码如下:/参数res代表拷贝源路径,des为拷贝目的路径asmlinkage int sys_sayhello(char *res,char *des)int in,out,i;char buf256;in =sys_open(res,O_RDONLY,0);if(in<0)return -3;printk("Wrong!");out = sys_open(des,O_WRONLY|O_CREAT|O_TRUNC,0600);if(out<0)sy

23、s_close(in);return -2;mm_segment_t fs = get_fs();set_fs(get_ds();while(0<(i=sys_read(in,buf,sizeof(buf)sys_write(out,buf,i);sys_close(in);sys_close(out);set_fs(fs);return 0;修改/usr/src/linux-3.2.78/arch/x86/include/asm/unistd_32.h,增加系统调用号。在系统调用号的末尾增加#define_NR_sayhello 349,即添加第349号系统调用,并将系统调用的总数改为

24、350.修改系统调用表在最后一行添加:.long sys_sayhello在/etc/default/grub中,在GRUB_HIDDEN_TIMEOUT=0前面加#sudo make mrproper 净化解压后的源代码sudo make menuconfig 对内核选项进行配置sudo make dep 建立模块间的依赖信息sudo make clean 删除配置时留下的一些不用的文件sudo make bzImage 编译内核,内核较小时可以用make zImage sudo make modules 编译内核模块sudo make modules_install 安装内核模块sudo

25、make install 安装内核重启用测试程序测试old.c#include <linux/unistd.h>#include <stdio.h>#include <stdlib.h>#include <asm/unistd.h>int main(int argc,char *argv)int b=syscall(349,argv1,argv2);printf("%dn",b);return 0;3.3实现字符设备驱动功能说明:增加一个新的设备驱动程序,将输入的字符串输出,并保存在缓冲区。设计思路:Linux核心是一种mon

26、olithic类型的内核,核心的所有功能部件都被拆成独立部分,这些部分通过严格的通讯机制进行联系。Linux内核是一个整体结构,因此向内核添加任何东西,或者删除某些功能,都十分困难。为了解决这个问题引入了模块机制,从而可以动态地在内核中添加或者删除模块。模块一旦被插入内核,就和内核其他部分一样。源程序:#include "linux/kernel.h"#include "linux/module.h"#include "linux/fs.h"#include "linux/init.h"#include "

27、;linux/types.h"#include "linux/errno.h"#include "linux/uaccess.h"#include "linux/kdev_t.h"#define MAX_SIZE 1024static int my_open(struct inode *inode, struct file *file);static int my_release(struct inode *inode, struct file *file);static ssize_t my_read(struct fil

28、e *file, char _user *user, size_t t, loff_t *f);static ssize_t my_write(struct file *file, const char _user *user, size_t t, loff_t *f);static char messageMAX_SIZE = ""static int device_num = 0;/设备号static int mutex = 0;/互斥用static char* devName = "myStrDevice"/设备名struct file_opera

29、tions pStruct =open:my_open,release:my_release,read:my_read,write:my_write, ;/* 注册模块*/intinit_module()int ret;ret = register_chrdev(0, devName, &pStruct);if (ret < 0)printk("regist failure!n");return -1;elseprintk("the device has been registered!n");device_num = ret;printk

30、("<1>the virtual device's major number %d.n", device_num);printk("<1>Or you can see it by usingn");printk("<1>-more /proc/devices-n");printk("<1>To talk to the driver,create a dev file withn");printk("<1>-'mknod /dev/

31、myDevice c %d 0'-n", device_num);printk("<1>Use "rmmode" to remove the modulen");return 0;/* 注销模块*/void cleanup_module()unregister_chrdev(device_num, devName);printk(" - remove modules success -n");static int my_open(struct inode *inode, struct file *file

32、)if(mutex)return -EBUSY; mutex = 1;/上锁try_module_get(THIS_MODULE);return 0;/* 每次使用完后会release*/static int my_release(struct inode *inode, struct file *file)module_put(THIS_MODULE); mutex = 0;/开锁return 0;staticssize_t my_read(struct file *file, char _user *user, size_t t, loff_t *f)if(copy_to_user(use

33、r,message,sizeof(message)return -EFAULT;return sizeof(message);static ssize_t my_write(struct file *file, const char _user *user, size_t t, loff_t *f)if(copy_from_user(message,user,sizeof(message)return -EFAULT;return sizeof(message);测试程序 #include <sys/types.h> #include <unistd.h> #inclu

34、de <fcntl.h> #include <linux/rtc.h> #include <linux/ioctl.h> #include <stdio.h> #include <stdlib.h>int main() char buff_in1024 = 0; /用户态写入缓冲区 char buff_out1024 = 0; /用户态读出缓冲区int fd;int ret;int sel;fd = open("/dev/myDevice", O_RDWR);if(fd = -1) printf("打开设

35、备文件失败n");exit(-1); printf("打开设备文件成功n"); loop1: printf("nn欢迎来到字符设备,请选择你的操作:n1.写操作 n2.读操作 n3.退出n");scanf("%d", &sel);if(sel = 1) printf("请输入你要写入的内容nn");scanf("%s", buff_in);ret = write(fd, buff_in, 1024);if (ret = 0) perror("写入失败n");

36、exit(-1); printf("n写入成功n");goto loop1; else if(sel = 2) ret = read(fd, buff_out, 1024);if (ret = 0) perror("read errorn");exit(-1); printf("读出字符成功!内容如下:nn%sn", buff_out);goto loop1; else if(sel = 3)goto loop2;else printf("选择有误,请重新输入!n");goto loop1; loop2:close

37、(fd);return 0;实验过程:1. #cd 3.1/进入文件所在文件夹2. #make /生成驱动模块strdev.ko3. #insmod strdev.ko/装载模块4. #mknod /dev/device c 251 0(用 cat /proc/devices找到系统分配的主设备号)5.#gcc -o test test.c/测试程序,成功6. #.test7. rmmod strdev /卸载模块8.#.test /再次测试,不成功,如图10所示3.4 系统监视器功能说明:监控系统状态,显示系统中若干部件使用情况。设计过程及实现:(1)/proc 文件特点:Linux的pro

38、c文件系统是进程文件系统和内核文件系统的组成的复合体,是将内核数据对象化为文件形式进行存取的一种内存文件系统,是监控内核的一种用户接口。它拥有一些特殊的文件(纯文本),从中可以获取系统状态信息。/proc/cpuinfo保存CPU信息,包括名称、型号、数目、主频、Cache等;/proc/version保存操作系统信息,包括系统版本、内核型号、GCC版本等;/proc/stat保存CPU活动信息数据,用来测算CPU使用率;/proc/meminfo保存内存空间和交换空间实时大小,可用来计算内存和交换分区使用率,MemTotal表示内存空间总大小,MemFree表示内存剩余空间大小,SwapTo

39、tal表示交换分区总大小,SwapFree表示交换分区剩余空间大小。据此可以算出内存和交换分区的使用率。系统信息页核心代码结构如下: vbox = gtk_vbox_new(FALSE,0);/新建容器 frame = gtk_frame_new (bufferf1);/新建标签页 label = gtk_label_new (bufferf1);/新建文本框,其余两个类似 gtk_container_add (GTK_CONTAINER (frame), label);/之后填入相应的值gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vb

40、ox, label);核心代码结构如下: sprintf(bufferl, "进程信息");hbox=gtk_hbox_new(FALSE, 5); scrolled_window = gtk_scrolled_window_new (NULL, NULL);/滚屏 gtk_widget_set_size_request (scrolled_window, 300, 300);clist=gtk_clist_new(5);/5 lists get_proc_info(clist,&p,&q,&r,&s);/得到进程信息gtk_signal_c

41、onnect(GTK_OBJECT(clist),"select_row",GTK_SIGNAL_FUNC(select_row_callback),NULL);/回调函数,响应行选择 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (scrolled_window),clist); /滚屏vbox=gtk_vbox_new(FALSE, 5); frame = gtk_frame_new (bufferl); gtk_widget_set_size_request (frame, 100, 215);la

42、bel = gtk_label_new (bufferf1); gtk_container_add (GTK_CONTAINER (frame), label); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 10); button1 = gtk_button_new_with_label("结束进程"); g_signal_connect (G_OBJECT (button1), "clicked",G_CALLBACK (kill_proc), "结束进程");/杀死

43、进程回调函数 gtk_box_pack_start(GTK_BOX(vbox), button1, FALSE, FALSE, 10); button2 = gtk_button_new_with_label("刷新"); g_signal_connect_swapped (G_OBJECT (button2), "clicked",G_CALLBACK (refresh), clist); /按钮回调,刷新屏幕 gtk_box_pack_start(GTK_BOX(vbox), button2, FALSE, FALSE, 10); gtk_widge

44、t_show_all(hbox);gtk_notebook_append_page (GTK_NOTEBOOK (notebook), hbox, label);核心代码结构如下: sprintf(bufferl, "模块信息");vbox = gtk_vbox_new(FALSE,0); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request (scrolled_window, 500, 250);gtk_scrolled_window_set_policy(G

45、TK_SCROLLED_WINDOW (scrolled_window),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); clist2=gtk_clist_new(3);/滚屏和列 get_module_info(clist2);gtk_signal_connect(GTK_OBJECT(clist2),"select_row",GTK_SIGNAL_FUNC(select_row_callback2),NULL);gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (s

46、crolled_window),clist2); gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 5);hbox=gtk_hbox_new(FALSE, 0);button3 = gtk_button_new_with_label("刷新");/刷新按钮g_signal_connect_swapped (G_OBJECT (button3), "clicked",G_CALLBACK (refresh2), clist2);gtk_widget_show_all(vbox);l

47、abel = gtk_label_new (bufferl);gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);核心代码结构如下: capability = gtk_vbox_new(FALSE,0); /内存资源 gtk_container_set_border_width(GTK_CONTAINER(capability),5); gtk_widget_set_size_request(capability,200,320); gtk_widget_show(capability); label = gtk_la

48、bel_new(" 内存资源 "); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),capability,label);gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook),3);/*把此页设为缺省显示页*/ cpu_hbox = gtk_hbox_new(FALSE,0);/cpu横向box gtk_box_pack_start(GTK_BOX(capability),cpu_hbox,TRUE,TRUE,2); gtk_widget_show(cpu_hbox); me

49、m_hbox = gtk_hbox_new(FALSE,0); /mem横向box gtk_box_pack_start(GTK_BOX(capability),mem_hbox,TRUE,TRUE,2); gtk_widget_show(mem_hbox); cpu_record = gtk_frame_new("cpu使用记录"); /cpu使用记录窗口 gtk_container_set_border_width(GTK_CONTAINER(cpu_record),5); gtk_widget_set_size_request(cpu_record,1000,130)

50、; gtk_widget_show(cpu_record); gtk_box_pack_start(GTK_BOX(cpu_hbox),cpu_record,TRUE,TRUE,2); cpu_record_drawing_area = gtk_drawing_area_new (); gtk_widget_set_size_request (cpu_record_drawing_area, 50,50);g_signal_connect(G_OBJECT(cpu_record_drawing_area), "expose_event",G_CALLBACK(cpu_rec

51、ord_callback),NULL);gtk_container_add (GTK_CONTAINER(cpu_record), cpu_record_drawing_area);gtk_widget_show (cpu_record_drawing_area); /内存使用记录窗口mem_record = gtk_frame_new("内存使用记录");gtk_container_set_border_width(GTK_CONTAINER(mem_record),5); gtk_widget_set_size_request(mem_record,1000,130);

52、 gtk_widget_show(mem_record); gtk_widget_set_size_request (mem_record_drawing_area, 50,50); g_signal_connect(G_OBJECT(mem_record_drawing_area), "expose_event",G_CALLBACK(mem_record_callback),NULL);/回调 gtk_widget_show (mem_record_drawing_area);源程序#include <stdio.h>#include <stdlib.

53、h>#include <string.h>#include <gtk/gtk.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <sys/vfs.h>#include <sys/time.h>#include <dirent.h>char *txt_pid=NULL;char *txt_pid2=NULL;char* meminfo_read();/*

54、内存使用情况*/char* stat_read();/*cpu使用率*/char* procsum_read();/*进程数*/gint mem_refresh(gpointer mem_label);/*内存使用情况刷新*/gint cpu_refresh(gpointer cpu_label);/*cpu使用率刷新*/gint process_refresh(gpointer process_label);/*进程数刷新*/gboolean cpu_record_callback (GtkWidget *widget,GdkEventExpose *event,gpointer data)

55、;gboolean mem_record_callback (GtkWidget *widget,GdkEventExpose *event,gpointer data);void cpu_record_draw(GtkWidget *widget);void mem_record_draw(GtkWidget *widget);static char temp_process50;/*进程数*/static char temp_cpu50;/*cpu使用率*/static char temp_mem50;/*内存使用*/static long idle,total;/*计算cpu时的数据*/static int flag=0;/*计算cpu使用率时启动程序的标志*/static int flag1=0;/*计算单个进程cpu使用率时使用的标志*/static long mem_total;/*内存总大小*/static long mem_free;/*空闲内存*/static long long ustime32768;/*前一次记录的用户态和核心态的总时间*/static long mtime32768;/*前一次记录的时刻*/static float cpu_used_percent=0;/*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论