Linux操作系统课程设计.docx
- 文档编号:29877051
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:24
- 大小:1.42MB
Linux操作系统课程设计.docx
《Linux操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《Linux操作系统课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
Linux操作系统课程设计
Linux操作系统课程设计
一、利用Linux有关系统调用函数编写一个简单的文件管理工具,要求实现以下功能(可在任意目录下操作)。
功能
说明(提示)
1.创建新文件
open(),close()
2.写文件
open(),write()
3.读文件
read()
4.复制文件
read(),write()
5.查看文件权限
需使用execv()函数执行”ls-l”命令实现
6.修改文件权限
chmod()
7.创建目录
mkdir()
8.查看当前路径与目录
类同5
9.删除目录
rmdir()
10.切换目录
chdir()
11.建立文件链接
link()
0.退出
exit()
二、通过访问/proc文件系统来获取系统的当前信息,包括:
(1)进程信息。
包括:
进程名称、运行状态、PID、优先级、内存使用量。
可结束任一进程。
(2)系统信息。
包括:
处理器信息(CPU名称、CPU频率、CPU类型、缓存大小),操作系统信息(系统类型、系统版本、GCC编译版本)。
(3)内存资源。
包括:
内存和缓冲区(内核使用情况(已用、剩余、中共)、交换区使用情况(已用、剩余、中共)),CPU使用率(各个核的使用率)。
(4)模块信息。
包括:
模块名称、内存使用、使用次数。
可卸载任一模块。
一、利用Linux有关系统调用函数编写一个简单的文件管理工具
程序代码:
#
#include
#include<>
#include
#include<>
usingnamespacestd;
intshowmenu()//显示菜单,在主函数中循环调用。
返回用户选择的选项。
{
intoption;
cout<<"1.创建新文件\n";
cout<<"2.写文件\n";
cout<<"3.读文件\n";
cout<<"4.复制文件\n";
cout<<"5.查看文件权限\n";
cout<<"6.修改文件权限\n";
cout<<"7.创建目录\n";
cout<<"8.查看当前路径与目录\n";
cout<<"9.删除目录\n10.切换目录\n";
cout<<"11.建立文件链接\n0.退出\n";
cin>>option;
returnoption;
}
voidcreatefile()//以用户输入的文件名创建新文件
{
stringfilename;
cout<<"inputthefilename\n";
cin>>filename;
ofstreamof;
(());
if(!
of)
{
cerr<<"openfail"< } (); } voidinsert()//写入用户指定的内容到指定文件 { stringfilename,msg; cout<<"inputthefilename\n"; cin>>filename; cout<<"inputsomethingyouwanttoinsert\n"; cin>>msg; ofstreamout; (()); if(! out) { cerr<<"openfail"< } out<<(); (); } voidreadfile()//读取文件内容并显示 { stringfilename; cout<<"inputthefilename\n"; cin>>filename; ifstreamin; (()); if(! in) { cerr<<"openfail"< } charbuffer[1024]; while(! ()) { (buffer,100); } cout<<"===>"< (); } voidcopyfile()//复制文件 { stringifilename; cout<<"inputthefilenameofoldfile\n"; cin>>ifilename; /*将文件内容读取到buffer中*/ ifstreamin; (()); if(! in) { cerr<<"openfail"< } charbuffer[1024]; while(! ()) { (buffer,100); } (); /*将buffer中的内容写入新文件*/ stringofilename,msg; cout<<"inputthefilenameofnewfile\n"; cin>>ofilename; ofstreamout; (()); if(! out) { cerr<<"openfail"< } out< (); } voidexecutecommand(constchar*command,char*const*argv)//在子进程中执行路径为//command的程序,参数在argv中 { intpid=fork(); if(pid==0) { if(execv(command,argv)==-1) { cout<<"===>error\n"; } } else sleep (1);//等待子进程执行完毕 } #include #include"" usingnamespacestd; intmain() { while(true)//keepingshowingthemenu { intoption; option=showmenu(); switch(option) { case1: //创建新文件 createfile(); break; case2: //写入 insert(); break; case3: //读取 readfile(); break; case4: //复制 copyfile(); break; case5: //查看权限 { char*argv[]={"ls","-l",NULL}; char*path="/bin/ls"; executecommand(path,argv); break; } case6: //修改权限 { stringfilename; stringmod; cout<<"inputthefilename\n"; cin>>filename; cout<<"inputthemode,r=4,w=2,x=1。 example: 777isrwxrwxrwx\n"; cin>>mod; charf[20],m[10]; char*argv[]={"chmod", strcpy(m,()), strcpy(f,()), NULL}; char*path="/bin/chmod"; executecommand(path,argv); break; } case7: //创建目录 { stringfoldername; cout<<"inputthefoldername\n"; cin>>foldername; charf[20]; char*argv[]={"mkdir", strcpy(f,()), NULL}; char*path="/bin/mkdir"; executecommand(path,argv); break; } case8: //查看当前路径 { char*argv[]={"pwd",NULL}; char*path="/bin/pwd"; executecommand(path,argv); break; } case9: //切换目录 { stringfoldername; cout<<"inputthefoldername\n"; cin>>foldername; charf[20]; char*argv[]={"rm", strcpy(f,()), "-r", NULL}; char*path="/bin/rm"; executecommand(path,argv); break; } case10: //切换目录 { stringdir; cout<<"inputthepathyouwanttobe\n"; cin>>dir; charp[30]; if(chdir(strcpy(p,()))==-1) {cout<<"failtochangedir"< break; } case11: //建立文件连接 { stringoldpath,newpath; cout<<"inputoldpath\n"; cin>>oldpath; cout<<"inputnewpath\n"; cin>>newpath; charnp[30],op[34]; if(link(strcpy(op,()),strcpy(np,()))==-1) {cout<<"failtochangedir"< break; } case0: return0; default: cout<<"请选择0到11"< break; } cout<<"\n"; } } 程序分为和两部分,主要功能保存在filehandler,h中,由showmenu()函数显示菜单,createfile()函数创建新文件,insert()函数写文件,readfile()函数读文件,copyfile()函数复制文件,executecommand()函数执行命令。 filehandler.pp文件中,主函数为一个死循环,调用showmenu()函数显示菜单、获取用户选择的选项,之后通过switch匹配相应的函数。 实验截图: 之后运行程序,显示菜单,接着我们一个一个功能测试 选择功能1并输入文件名后,可以看到文件夹中确实创建了新文件 选择功能2之后、输入要写入的文件的文件名,再输入要写入的内容 选择功能3之后,输入要读取的文件的文件名,在提示符”===》”之后的是文件内容 选择功能4,依次输入旧文件名,新文件名 选择功能5,调用命令ls查看权限 选择功能6,输入文件名xiexie,并输入777之后再选择功能5,可以看到test2的权限变成了rwxrwxrwx 选择功能7,输入新目录的名字 选择功能8,查看当前目录 选择功能9,输入刚刚创建的目录的目录名,确实删除了 选择功能10,切换到/home目录 通过功能10切换会之前的shiyan6目录之后,选择功能11,创建filehandler.h的文件连接 二、通过访问/proc文件系统来获取系统的当前信息 程序代码: //F #include<> #include #include<> #include<> #include #include<> #include<> #include<> #include<> voidmenu(void); voidPIF(void); voidSIF(void); voidMIF(void); voidBIF(void); intmain(){ intchoose; menu(); scanf("%d",&choose); while(choose! =0){ switch(choose){ case1: PIF(); break; case2: SIF(); break; case3: MIF(); break; case4: BIF(); break; default: printf("**************没有该选项,请重新输入**************\n"); } menu(); scanf("%d",&choose); } return0; } voidmenu(void){ printf("***************************************\n"); printf("*********亲爱的用户请输出你需要的操作*********\n"); printf("**************1.查看进程信息*****************\n"); printf("**************2.查看系统信息***************\n"); printf("**************3.查看内存资源**************\n"); printf("**************4.查看模块信息**************\n"); printf("**************0.退出该系统**************\n"); printf("***************************************\n"); printf("**************请输入1-4*************\n"); } voidPIF(void){ char*pa="/usr/bin/X11/top"; char*arg[4]={"top",NULL}; if(fork()==0){ printf("*****现在正在进入进程信息界面******\n"); execv(pa,arg); printf("ps: 在该界面你可以输入k进行杀死进程,输入k之后再输入进程编号〔PID〕号\n"); printf("ps: 如果你想要退出该界面,可以输入q进行退出\n"); }else{ wait(0); } } voidSIF(void){ printf("-------------------------------------\n"); printf("***系统信息如下***\n"); printf("-------------------------------------\n"); if(fork()==0){ execlp("/bin/cat","cat","/proc/version",NULL); }else{ wait(0); } printf("-------------------------------------\n"); printf("***处理器信息如下******\n"); printf("-------------------------------------\n"); if(fork()==0){ execlp("/bin/cat","cat","/proc/cpuinfo",NULL); }else{ wait(0); } } voidMIF(void){ printf("-------------------------------------\n"); printf("***有关内存的信息如下***\n"); printf("-------------------------------------\n"); if(fork()==0){ execlp("/bin/cat","cat","/proc/meminfo",NULL); }else{ wait(0); } } voidBIF(void){ printf("-------------------------------------\n"); printf("***所有模块信息如下〔谨慎卸载〕***\n"); printf("-------------------------------------\n"); char*path="/bin/lsmod"; char*argv[4]={"lsmod",NULL}; if(fork()==0){ execv(path,argv); }else{ wait(0); } printf("-------------------------------------\n"); charname[1024]; printf("***请输入你所需要卸载的模块名: ***\n"); scanf("%s",name); char*pa="/sbin/rmmod"; char*ar[4]={"rmmod",name,NULL}; if(fork()==0){ execv(pa,ar); }else{ wait(0); printf("卸载成功! \n"); } } 实验截图: 进程信息: 杀死进程: 系统信息: 内存模块: 模块信息: 卸载模块: 卸载成功: 实验总结: 通过这次课程设计,让我明白如何利用Linux有关系统调用函数编写一个简单的文件管理工具,如何写程序通过访问/proc文件系统来获取系统的当前信息,虽然大一只学了C++,但是c与C++有很多相似之处,通过查看资料还是能搞明白。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 操作系统 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)