版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计与实现实验一、进程管理与进程同步实验目的:了解进程管理的实现方法,理解和掌握处理进程同步问题的方法并完成程序设计。实验内容:实现银行家算法、进程调度的过程模拟。实验步骤: 理解银行家算法的核心机制;设计相应数据结构;编程实现;测试。 理解进程的三状态调度过程;设计调度算法;编程实现;测试。实验结果:所实现的系统提供一个用户界面,可以在上边发出资源申请命令,系统应能给出是否可以接受申请,并且有结论输出;所实现的系统根据一个进程调度命令文件,模拟进程的各种调度过程,用适合的表达方式表示出来。/进程调度的过程模拟/ PStateConvert.cpp : Defines the en
2、try point for the console application./#include stdafx.h#include stdio.h#include #include trique.h#include iostream.hint r3=0;void readFile(prdy &ready) int pid,runtime,iotime,ioclock,key=0; prdy p4; FILE *fp=NULL; p0 = ready; p1 = (prdy)malloc(sizeof(rdy); p2 = (prdy)malloc(sizeof(rdy); p3 = (prdy)
3、malloc(sizeof(rdy); p1-next = NULL; p2-next = NULL; p3-next = NULL; /p-next = NULL; if(fp = fopen(proCtrFile.txt,rb)=NULL) printf(打开文件失败!); do key +; fscanf(fp,%d,&pid); pkey-que = pid; fgetc(fp); fscanf(fp,%d,&runtime); pkey-rtm = runtime; fgetc(fp); fscanf(fp,%d,&ioclock); pkey-iotm = ioclock; fge
4、tc(fp); fscanf(fp,%d,&iotime); pkey-iolong = iotime; fgetc(fp); p0-next = pkey; p0 = p0-next; if(key = 3) break;/用三个指针变量来存储中间的输入。因为同一个指针变量指向相同的空间,会使结果/中出现的值都为一样的; while(true); fclose(fp);void delFromReady(prdy &ready) prdy p,q; p = ready; q = p-next; p-next = q-next;void insertToSus() printf(阻塞过程中.
5、.n);void delFromSus() printf(阻塞结束!n);void insertToReady(prdy &ready,prdy runQue) prdy p; p = ready; while(p-next) p = p-next; runQue-next = NULL; p-next = runQue;void roundrun(prdy &ready) prdy p, runQue; int time; p = ready; do getchar();/接受任意键 /runQue = insertToRun(p-next);/就绪队列拿出一个进程放入运行队列 runQue
6、 = p-next; delFromReady(ready); time = rrunQue-que +; if(time = runQue-iotm) for(int i=0;i iolong;i+) insertToSus(); delFromSus(); insertToReady(ready,runQue); else if(time = runQue-rtm) printf( 第%d个进程运行结束! , runQue-que); else printf(一个时间片结束!n); insertToReady(ready,runQue); printf(n任意键继续. .n); /delF
7、romRun(runQue); while(p-next!=NULL);int main(int argc, char* argv) prdy ready; /就绪队列 prun qrun=NULL; /运行队列 pspd suspend=NULL; /阻塞队列 ready = (prdy)malloc(sizeof(rdy); ready-next = NULL; readFile(ready);ready; roundrun(ready); return 0; 实验二、存储器管理实验目的:了解虚拟存储器管理的方法,理解置换算法的工作原理。实验内容:编程实现LRU等置换算法,模拟实现虚拟存储
8、器的地址变换过程。实验步骤:理解LRU等置换算法;理解虚拟存储器的地址变换过程。编程实现;测试实验结果:所实现的系统应能形象地表示出置换算法的运行情况,以及将输入的逻辑地址变换成物理地址的过程。 / LRU.cpp : Defines the entry point for the console application. /#include stdafx.h#include int ye10=5,3,1,2,1,3,2,4,2,4;int yeSize3;int isExists(int key) for(int i=0;i3;i+) if(yeSizei = yekey) return y
9、eSizei; return 0;void exchange(int pos,int key) int ecg; ecg = yeSizepos; yeSizepos = yeSize2; yeSize2 = ecg;void Print(bool isType,int key) if(isType) cout yekey 命中 endl; else cout yekey 未命中 endl; cout 淘汰 yeSize0 endl; int LRU() int key = 0; int pos; while( key!=10 ) if( pos = isExists(key) ) Print
10、(true,key);/命中 exchange(pos,key); else Print(false,key);/淘汰yeSize0 /替换 yeSize0=yeSize1; yeSize1=yeSize2; yeSize2 = yekey; key +; return 1;int main(int argc, char* argv) LRU(); /Print(); return 0;本文来自CSDN博客,转载请标明出处: HYPERLINK /sayigood/archive/2007/06/20/1659101.aspx/sayigood/archive/2007/06/20/16591
11、01.aspx操作系统课程设计题目 一. 混合索引模式下文件空间管理设计要求:编写一程序,模拟混合索引形式的文件系统。能接收建立、删除、读、写和查询属性的命令,并在模拟文件系统中进行操作。 例: create a1.doc 8000 /建立一个长度为8000字节的文件,文件名为a1.doc earse a1.doc /删除文件 read a1.doc 17 3 /从a1.doc文件的第17个字节开始,显示3个字节的内容 write a1.doc 8 test /从a1.doc文件的第8个字节开始,写入test字符串 ask a1.doc /显示文件属性 文件名,I节点编号,类型,长度,时间等。
12、 建立文件:从命令中得到文件名,得到该文件的文件长度,建立文件;从模拟空闲索引表文件中找到一个空闲索引节点,填写相应信息;查找模拟空闲盘块表文件,分配空闲盘块,并将分配的空闲盘块号写入所申请索引节点的地址项中(注意按混合索引方式);之后将产生的索引块(如果有的话)的内容、文件的内容(如_)等信息写入模拟磁盘镜像文件中;在模拟目录表中建立一个目录项,填写文件名及申请的索引节点编号;。 删除文件回收文件占用的空间,修改模拟空闲盘块表文件;回收索引节点空间,修改模拟空闲索引节点表文件;修改模拟目录表文件。 读文件内容。 写文件内容。 显示文件属性。 模拟文件系统中使用4个文件模拟相应的系统环境: 模
13、拟磁盘空间文件 模拟文件系统的磁盘字节一块 容量:100K 内容只包含数据和索引盘块。 例:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ xyz _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 模拟空闲盘块表文件模拟位示图法表示的空闲盘块数据结构 个字节表示一个盘块 能表达:6400个盘块例:0011
14、0100 模拟I节点表文件容量:100个索引节点 42每个I节点的结构:1 编号; 1 类型; 4 文件的长度; 14 文件建立/最后修改的时间(yyyymmddhhmmss); 22 物理地址(8个直接链接,1个一级,1个二级,1个三级链接);例:3a.20030420101010. 模拟目录表文件容量:100每项结构:11 文件名;1 所分配的I节点的编号。例:_ _ _ _ _ _ a1docX要求:1、 设计的分析,解决方案2、 执行每条指令都要有具体的提示内容3、 画出程序的基本结构框图和流程图4、 对程序的每一部分要有详细的设计分析说明,说明设计实现所用的原理,采用的数据结构5、
15、各个函数的详细说明(如创建进程,销毁进程等)6、 源代码格式规范,注释不少于三分之一7、 对运行的结果要有结果的分析,8、 设计中遇到的问题,设计的心得体会9、 参考资料10、 开发工具不限 二: 进程调度模拟程序设计要求:编写一程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度策略为时间片轮转。虚拟程序的描述: 虚拟指令的格式: 操作命令 操作时间其中,操作命令有以下几种:l C : 表示在CPU上计算l I :表示输入l O:表示输出l W:表示等待l H:表示进程结束操作时间代表该操作命令要执行多长时间假设I/O设备的数量没有限制I、O、W三条指令实际上是不占用CPU的,执行
16、这三条指令就应将进程放入对应的等待队列(Input等待队列、Output等待队列、Wait等待队列) 例有一虚拟程序p1.prc描述如下:c 30o 12c 9i 14h 0该虚拟程序表示的含义是:先在CPU上计算30秒,再在输出设备上输出12秒,计算9 秒,在输入设备上输入14秒,程序结束。 实验方法:先用文本编辑器写三个虚拟程序,可以分别命名为p1.prc p2.prc p3.prc。然后编一进程调度程序,将这三个虚拟程序创建成进程,并按各虚拟进程的指令要求执行和调度。用一个文本文件, 里面只能放一个整数,表示一个时间因子,用于调节设计程序OS.EXE的执行速度。运行结果要求: 要求在每个
17、线程创建、占用处理机、开始输出、开始输入和结束操作时分别显示一行提示信息,以确定所有处理都遵守相应的进程调度规则。要求:1. 设计的分析,解决方案2. 进程的创建要创建进程控制块(可参考UINX的进程控制块的设计,要求有进程的必要信息)3. 要有运行队列、就绪队列、Input等待队列、Output等待队列、Wait等待队列4. 要有进程切换时的上下文转换过程5. 要动态显示每个进程的当前状态及指令执行情况,动态显示每个队列的当前状态6. 画出程序的基本结构框图和流程图7. 对程序的每一部分要有详细的设计分析说明,说明设计实现所用的原理,采用的数据结构8. 进程的各个操作函数的详细说明(如创建进
18、程,销毁进程等)9. 源代码格式规范,注释不少于三分之一10. 对运行的结果要有结果的分析,11. 设计中遇到的问题,设计的心得体会12. 参考资料13. 开发工具不限本文来自CSDN博客,转载请标明出处: HYPERLINK /xkou/archive/2004/06/26/27510.aspx/xkou/archive/2004/06/26/27510.aspx操作系统课程设计-页面置换算法代码#include #include #define Bsize 3#define Psize 12using namespace std;int QStringPsize;void P_String
19、() int i; srand(unsigned)time(NULL); for(i=0;iPsize;i+) QStringi=rand()*9/RAND_MAX+1; cout页面走向:; for(i=0;iPsize;i+) coutQStringi ; coutendl;struct pageInfor int content;/页面号 int timer;/被访问标记;class Fifo_replacepublic: Fifo_replace(void); /构造函数 Fifo_replace(void); /析构函数 int findSpace(void); /查找是否有空闲内存
20、 int findExist(int curpage); /查找内存中是否有该页面 int findReplace(void); /查找应予置换的页面 void FIFO(void); /FIFO算法 void BlockClear(void); /BLOCK恢复 pageInfor *block; /物理块 pageInfor *page; /页面号串 int memory_stateBsizePsize; int s;private:;Fifo_replace:Fifo_replace(void) int j; P_String(); s=0; block = new pageInforB
21、size; for(int i=0; iBsize; i+) /初始化Block blocki.content = -1; blocki.timer = 0; page = new pageInforPsize; for(i=0; iPsize; i+) pagei.content = QStringi; pagei.timer = 0; for(i=0;iPsize;i+) for(j=0;jBsize;j+) memory_stateji=0;Fifo_replace:Fifo_replace() s=0;int Fifo_replace:findSpace(void) for(int i
22、=0; iBsize; i+) if(blocki.content = -1) return i;/找到空闲内存, return -1;int Fifo_replace:findExist(int curpage) for(int i=0; iBsize; i+) if(blocki.content = pagecurpage.content) return i;/找到内存中有该页面,返回BLOCK中位置 return -1;int Fifo_replace:findReplace(void) int pos = 0; for(int i=0; i= blockpos.timer) pos =
23、 i;/找到应予置换页面,返回BLOCK中位置 return pos;void Fifo_replace:FIFO(void) int exist,space,position ; for(int i=0; iPsize; i+) exist = findExist(i); if(exist != -1) for(int b=0; bBsize; b+) memory_statebi=memory_statebi-1; s+; else space = findSpace(); if(space != -1) for(int b=0; bBsize; b+) memory_statebi=me
24、mory_statebi-1; blockspace = pagei; memory_statespacei=blockspace.content; if(space=1) memory_state10=0; memory_state20=0; else memory_state21=0; else for(int b=0; bBsize; b+) memory_statebi=memory_statebi-1; position = findReplace(); blockposition = pagei; memory_statepositioni=blockposition.conten
25、t; for(int j=0; jBsize; j+) blockj.timer+;/BLOCK中所有页面TIMER+ void Fifo_replace:BlockClear(void) for(int i=0; iBsize; i+) blocki.content = -1; blocki.timer = 0; typedef struct page int num; /*记录页面号*/ int time; /*记录调入内存时间*/Page; /* 页面逻辑结构,结构为方便算法实现设计*/Page bBsize; /*内存单元数*/int cBsizePsize; /*暂保存内存当前的状态
26、:缓冲区*/int queue100; /*记录调入队列*/int K; /*调入队列计数变量*/ /*初始化内存单元、缓冲区*/void Init(Page *b,int cBsizePsize) int i,j; for(i=0;iBsize;i+) bi.num=-1; bi.time=Psize-i-1; for(i=0;iBsize;i+) for(j=0;jPsize;j+) cij=-1;/*取得在内存中停留最久的页面,默认状态下为最早调入的页面*/int GetMax(Page *b) int i; int max=-1; int tag=0; for(i=0;imax) ma
27、x=bi.time; tag=i; return tag;/*判断页面是否已在内存中*/int Equation(int fold,Page *b) int i; for(i=0;i=0) bval.time=0; for(i=0;iBsize;i+) if (i!=val) bi.time+; else queue+K=fold;/*记录调入页面*/ val=GetMax(b); bval.num=fold; bval.time=0; for(i=0;iBsize;i+) if (i!=val) bi.time+; void main(void) cout|页 面 置 换 算 法|endl;
28、 cout|endl; cout选 应用FIFO算法endl; cout选 应用LRU算法endl; cout选择退出select; cout你选择的是菜单:selectendlendl; switch(select) case 0: cout完成退出。endl; break; case 1: coutFIFO算法状态:endl; test.FIFO(); test.BlockClear(); coutendl; for(p=0;pBsize;p+) for(q=0;qPsize;q+) couttest.memory_statepq ; coutendl; coutendl; cout缺页率
29、:Psize-test.s/Psizeendlendl; test.Fifo_replace(); cout请选择菜单:endl; break; case 2: int i,j; char y1; K=-1; Init(b, c); for(i=0;iPsize;i+) Lru(QStringi,b); c0i=QStringi; /*记录当前的内存单元中的页面*/ for(j=0;jBsize;j+) cji=bj.num; /*结果输出*/ coutLRU算法状态:endl; coutendl; for(i=0;iBsize;i+) for(j=0;jPsize;j+) if(cij=-1
30、) cout 0; else cout cij; cout endl; coutendl; cout缺页率:K+1/Psize; coutendl; break; default: cout请输入正确菜单号。endl; break; 本文来自CSDN博客,转载请标明出处: HYPERLINK /ceamky/archive/2007/08/30/1765843.aspx/ceamky/archive/2007/08/30/1765843.aspx设 计 总 目 的v 掌握Linux操作系统的使用方法;v 了解Linux系统内核代码结构;v 掌握实例操作系统的实现方法。实验一 文件拷贝与进程操作
31、一实验要求 熟悉和理解Linux编程环境二实验内容1)编写一个C程序,实现文件拷贝功能。2)编写一个C程序,使用Linux下的图形库,分窗口显示三个并发进程的运行。三实验过程A文件拷贝程序源代码:#include#include #include #include #include main() int newfile,in; int n; char infile30,outfile30=new_file,buffer32; printf(Enter the file name needed to be copiedn); scanf(%s,infile); if(in=open(infile
32、,O_RDONLY)0) printf(cannot open infilen); exit(0); if(newfile=open(outfile,O_CREAT|O_WRONLY|O_TRUNC)0) write(newfile,buffer,n); printf(The newfile name is new_filen); close(in); close(newfile);B.拷贝程序运行结果截图: 图1-1 文件拷贝 图1-2 new_file文件 注:在上面所示图中,由上下两个ls对比看出在程序执行前后,生产了新文件new_file,文件拷贝成功C .程序源代码: 进程控制程序代
33、码:#include main() WINDOW *p1,*p2,*p3; initscr();/开启 curses 模式 refresh();/刷新屏幕 int j,i,k; j=fork(); if(j=0) p1=newwin(30,30,1,4);/建立一个指定大小的窗口,长,宽,起始位置 box(p1,ACS_VLINE,ACS_HLINE);/画窗口 mvwprintw(p1,1,1,the process1);/在窗口中某一点显示字符串 wrefresh(p1); for(i=0;i0) k=fork(); if(k=0) p2=newwin(30,30,1,35);/建立一个指
34、定大小的窗口,长,宽,起始位置 box(p2,ACS_VLINE,ACS_HLINE);/画窗口 mvwprintw(p2,1,1,the process2);/在窗口中某一点显示字符串 wrefresh(p2); for(i=0;i0) p3=newwin(30,30,1,66);/建立一个指定大小的窗口,长,宽,起始位置 box(p3,ACS_VLINE,ACS_HLINE);/画窗口 mvwprintw(p3,1,1,the process3);/在窗口中某一点显示字符串 wrefresh(p3); for(i=0;i5;i+) sleep(1); mvwprintw(p3,3+i,1,
35、 the third display %d,i+49); wrefresh(p3 ); delwin(p3); getch(); endwin(); return 0; D.进程控制程序运行结果截图: 1-3 编译运行window.c1-4 三个进程并发执行四实验小结 拷贝程序主要使用了文件操作函数中的open(),read(),write(),其中创建文件也是用open()实现的;进程控制程序中利用fork()函数创建三个进程,通过判断进程号来分别执行各自的代码,在画图中主要使用了newwin()创建窗口,box()画出窗口,mvwprintw()在窗口中显示字符,wrefresh()刷新窗
36、口,其中刷新窗口还有一个函数refresh(),两个刷新函数的共同特点是对窗口的所有变动一起刷新,不同点:refresh()是适时刷新,就是对它前后的改动都可以刷新,而wrefresh()只是对它前面的改动刷新,最后用delwin()删除窗口。实验二 添加系统调用 一实验要求掌握添加系统调用的方法二实验内容:v 采用编译内核的方法,添加一个新的系统调用。v 编写一个应用程序,测试新添加的系统调用。v 系统调用的功能:文件拷贝。三实验过程:A.编写需要添加的系统调用,源代码如下#include asmlinkage int sys_wucopy(char *argv1,char *argv2)
37、int newfile,in; int n,mount=0; mm_segment_t right; char buffer32; if(in=sys_open(argv1,O_RDONLY,0)0) printk(cannot open infilen); sys_exit(-1); if(newfile=sys_open(argv2,O_CREAT|O_WRONLY|O_TRUNC,0666)0) mount+=n; if(sys_write(newfile,buffer,n)!=n) printk(Copy from %s to %s failedn,argv1,argv2); sys_
38、exit(-1); set_fs(right); sys_close(in); sys_close(newfile); return mount;B.内核源码解压: 下载 linux-.tar.gz的代码,放在/usr/src/ 的目录下,然后解压: 解压后会出现文件夹 linux。 C.添加代码: 1:在 /usr/src/linux/kernel/sys.c文件中添加A中的代码:2:在/usr/src/linux/include/asm-i386/unistd.h中添加系统调用清单: define _NR_ wucopy 318 define _NR_syscalls 319 3: /us
39、r/src/linux/arch/i386/kernel/syscall_table.s中增加新的内核函数的指针: .long sys_youcall D.配置内核: 在 /boot 的目录下找到一个类似 config-2.6.18-1.2798.fc6的配置文件,将他copy到 /usr/src/linux-/下,并改名为 configrootlocalhost linux-# make menuconfig然后直接保存退出。 E.编译内核:rootlocalhost linux-# make clean /清除以前编译过的.0文件rootlocalhost linux-# make bzI
40、mage /编译内核 F.模块编译:rootlocalhost linux-# make modules /编译选择的模块rootlocalhost linux-# make modules_install /安装模块G.配置grub:1: 将/usr/src/linux/arch/i386/boot/bzImage拷贝到/boot/ 目录下2:制作initrd文件:rootlocalhost boot# mkinitrd initrd-.img 3: 配置启动文件 /boot/grub/menu.lst,添加下列内容: title Linuxtest root (hd0,6) kernel
41、/boot/bzImage ro root=LABEL=/ rhgb quiet initrd /boot/initrd-.img H.使用自己添加的系统调用: 重启计算机,选择 linuxtest 进入。 编写测试程序,代码如下:#include#include#include#includeint main(void) char infile30,outfile30=knew_file; printf(Enter the file name needed to be copiedn); scanf(%s,infile); if(syscall(318,infile,outfile) pri
42、ntf(success!n); printf(The newfile name is knew_filen); else printf(failed); return 0; I. 程序运行结果截图: 2-1 kernel_test.c文件,含新的系统调用 2-2 kernel_test.c编译执行过程 2-3 新创建的文件knew_file四实验小结 在这个实验中主要是明白这个很机械的过程以及相关的命令格式,而且能够理解这个过程中每一步的作用,在前面已经写得很详细,在此不赘述。实验三 添加驱动程序 一实验要求掌握添加设备驱动程序的方法 二实验内容v 采用模块方法,添加一个新的设备驱动程序。v
43、要求添加字符设备的驱动。v 编写一个应用程序,测试添加的驱动程序。三实验过程A.编写驱动程序,源代码如下:#include #include #include /* printk() */#include /* everything. */#include /* size_t */#include MODULE_LICENSE(Dual BSD/GPL);int mydev_major = 0;char *buffer=a; ssize_t mydev_write (struct file *filp, const char _user *buf, size_t count,loff_t *p
44、os) int ret; ret=copy_from_user(buffer,buf,count); return 1;ssize_t mydev_read(struct file *filp, char _user *buf,size_t count, loff_t *pos) int ret; ret=copy_to_user(buf,buffer,count); return 1;struct file_operations mydev_fops = .read = mydev_read, .write = mydev_write, .owner = THIS_MODULE ;int m
45、ydev_init(void) if(mydev_major=register_chrdev (0, mydev, &mydev_fops)=0) printk(install success!n); return 1; else return 0; void mydev_cleanup(void) unregister_chrdev(mydev_major, mydev); module_init(mydev_init);module_exit(mydev_cleanup);B.编译执行程序,makefile文件如下:obj-m =mydev.o modules: make -C /lib/
46、modules/$(shell uname -r)/build M=$(PWD) modules gcc -o test test.c rmmod mydev rm -f /dev/mydev insmod mydev.ko mknod /dev/mydev c 253 0clean: rm -rf *.o *.ko .*.cmd *.mod.c .tmp_versions C.编写测试程序,源代码如下: #include #includeint main(void) char buf32; int fd; printf(please input :); scanf(%s,buf); fd=o
47、pen(/dev/mydev,O_RDWR); if(write(fd,buf,32)0) printf(error in writen); if(read(fd,buf,32)0) printf(error in readn); return 0; else printf(The content readed from mydev is : %sn,buf); return 1; D.程序运行结果截图: 3-1 驱动程序的编译结果 3-2 显示加载的设备信息四实验小结本实验关键的地方就是每个子函数的格式是固定的包括函数名,参数个数,参数类型,函数的个数可以有自己的功能而设置,我实现的功能很简
48、单,就是把用户对设备的操作转换为对文件的操作,而且并这个设备是虚拟的,所以没有驱动程序的上半部,硬件中断以及对硬件的之间操作函数。因此这个驱动程序只是实现了其必需的四个函数,在mydev_write()中使用内核函数copy_from_user()实现了对设备文件写操作,在mydev_read()使用内核函数copy_to_user()实现了对设备文件的读操作,在module_init()使用了register_chrdev()实现了设备的注册,在module_exit()中使用了unregister_chrdev()实现了设备的注销。实验四 文件分析资源管理器一实验要求理解和分析/proc文
49、件 二实验内容v 了解/proc文件的特点和使用方法。v 监控系统状态,显示系统中若干部件的使用情况。v 用图形界面显示系统监控状态。三实验过程A.源代码如下:#define GTK_ENABLE_BROKEN/在文本构件中使用#include#include #include dirent.h#include unistd.h#include stdio.h#include sys/file.h#include sys/types.h#include sys/stat.h#include fcntl.h#include string.h#include time.h#include math
50、.h#include struct Process char name20; char pro_id5; char cpu_take5; char mem_take10; pro200;char *buf5=cpu informationn,the memory informationn,the process informationn,the disk informationn,system informationn;char *title5=cpu信息,内存信息,进程信息,硬盘信息,综合信息;char *title15=cpu版本及运行状态,内存使用情况,进程运行状态,硬盘大小以及分区情况
51、,系统时间及内核版本;char *button_char3=上一页,下一页,关 闭;GtkWidget *text;GtkWidget *table;void show_cpu_info(void);void show_mem_info(void);void show_process_info(void);void show_disk_info(void);void show_sys_info(void);int select_name(char name) int i; for(i=0;namei!=0;i+) if(isalpha(namei)|namei=.) return 0; ret
52、urn 1; void delete_event(GtkWidget *window,gpointer data)/回调函数,退出窗口管理程序 gtk_main_quit();int main(int argc,char *argv) GtkWidget *window;/定义窗口 gint i; GtkWidget *table1;/定义表格 GtkWidget *button3;/定义按钮 GtkWidget *vscrollbar;/定义滚动条 GtkWidget *notebook;/定义笔记本 GtkWidget *frame;/定义框架 GtkWidget *label,*labe
53、l1;/定义标签 gtk_init(&argc,&argv);/在任何构件生成之前完成 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);/创建窗口 gtk_window_set_title(GTK_WINDOW(window),资源管理器);/设置窗口标题 gtk_widget_set_usize(window, 480, 500);/设置窗口大小 gtk_container_set_border_width(GTK_CONTAINER(window),5);/设置窗口边框宽度 gtk_widget_show(window);/显示窗口 table1=gt
54、k_table_new(11,10,TRUE);/创建表格10行*10列 gtk_widget_show(table1);/显示表格 1 gtk_container_add(GTK_CONTAINER(window),table1);/将table1装进窗口 notebook=gtk_notebook_new();/创建笔记本 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook),GTK_POS_LEFT);/设置标签放在左边 gtk_widget_show(notebook);/显示笔记本 gtk_table_attach_defaults(GTK_
55、TABLE(table1),notebook,0,10,0,10);/将笔记本装进表格 for(i=0;ivadj); gtk_widget_show (vscrollbar);/显示滚动条 gtk_table_attach (GTK_TABLE (table), vscrollbar, 9,10, 0, 10,GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);/将滚动条装进表格 label=gtk_label_new(titlei);/创建标签/将装有框架和标签的页面添加 gtk_notebook_append_page(GTK_NOTE
56、BOOK(notebook),frame,label); for(i=0;id_name) strcpy(_id,ptr-d_name); i+; total+; printf(%dn,total); sprintf(show,%3d,total); strcat(text_value,show); closedir(dir); for(i=0;itotal;i+) strcpy(path_statm,/proc/); strcpy(path_status,/proc/); strcat (path_statm,_id); strcat (path_statm,
57、/statm); strcat (path_status,_id); strcat (path_status,/status); fdfrom=open(path_status,O_RDONLY); bytesread=read(fdfrom,buffer,80); if(bytesread=0) printf(read error!n); strtok(buffer,: ); strcpy(,strtok(NULL,n); close(fdfrom); fdfrom=open(path_statm,O_RDONLY); bytesread=read(fdfr
58、om,buffer,80); if(bytesread=0) printf(read error!n); strcat(proi.mem_take,strtok(buffer, ); strcat(proi.mem_take,kb); close(fdfrom); strcat(buff,); strcat(buff,tt); strcat(buff,_id); strcat(buff,tt); strcat(buff,proi.mem_take); strcat(buff,n); gtk_text_insert(GTK_TEXT(text),NULL,NUL
59、L,NULL,buff,-1); strcpy(buff, ); label=gtk_label_new(text_value);/创建显示进程数的标签 gtk_widget_show(label);/显示标签 gtk_table_attach_defaults(GTK_TABLE(table),label,0,10,10,11);/将标签装入表格最后一行 void show_sys_info(void)/4 显示系统主机名,内核版本,运行时间,当前时间,更新时间, int sys_fd,i,hour,second,minute; char buf2000= ,buf11000; char *
60、p; char showm20; int time_run; time_t timep; char *sys_info= /proc/sys/kernel/hostname,/proc/version,/proc/uptime,/proc/uptime ; strcat(buf,nnnnhostname : ); sys_fd=open(sys_info0,O_RDONLY); read(sys_fd,buf1,1000); strcat(buf,strtok(buf1,n); strcat(buf,n); strcat(buf,nnkernel vertion : ); sys_fd=ope
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农产品销售合同协议范本
- 招标文件房产项目
- 版短期无担保个人
- 第三方支付保证金协议
- 知识产权顾问合同的争议解决方法分享
- 学生健康饮食承诺保证书
- 装饰拆除改造合同
- 道具采购合同范本中文模板样式
- 导购员合同协议的交通补贴
- 幼儿园食品订购合同范本
- NB-T47003.1-2009钢制焊接常压容器(同JB-T4735.1-2009)
- 聚焦高质量+探索新高度+-2025届高考政治复习备考策略
- 惠州市惠城区2022-2023学年七年级上学期期末教学质量检测数学试卷
- 北京市西城区2022-2023学年七年级上学期期末英语试题【带答案】
- ISO45001-2018职业健康安全管理体系之5-4:“5 领导作用和工作人员参与-5.4 工作人员的协商和参与”解读和应用指导材料(2024A0-雷泽佳)
- 看图猜成语共876道题目动画版
- 小学二年级上册数学-数角的个数专项练习
- 曲式与作品分析智慧树知到期末考试答案章节答案2024年兰州文理学院
- 园林设施维护方案
- 特种设备使用单位日管控、周排查、月调度示范表
- 供应链成本控制与降本增效
评论
0/150
提交评论