版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
年4月19日Linux操作系统课程设计文档仅供参考Linux操作系统课程设计班级:计算机13-2 学号: 姓名:谢甲山成绩:一、利用Linux有关系统调用函数编写一个简单的文件管理工具,要求实现以下功能(可在任意目录下操作)。功能说明(提示)1.创立新文件open(),close()2.写文件open(),write()3.读文件read()4.复制文件read(),write()5.查看文件权限需使用execv()函数执行”ls-l”命令实现6.修改文件权限chmod()7.创立目录mkdir()8.查看当前路径与目录类同59.删除目录rmdir()10.切换目录chdir()11.建立文件链接link()0.退出exit()二、经过访问/proc文件系统来获取系统的当前信息,包括:(1)进程信息。包括:进程名称、运行状态、PID、优先级、内存使用量。可结束任一进程。(2)系统信息。包括:处理器信息(CPU名称、CPU频率、CPU类型、缓存大小),操作系统信息(系统类型、系统版本、GCC编译版本)。(3)内存资源。包括:内存和缓冲区(内核使用情况(已用、剩余、中共)、交换区使用情况(已用、剩余、中共)),CPU使用率(各个核的使用率)。(4)模块信息。包括:模块名称、内存使用、使用次数。可卸载任一模块。一、利用Linux有关系统调用函数编写一个简单的文件管理工具程序代码:#filehandler.h#include<iostream>#include<string.h>#include<fstream>#include<unistd.h>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;of.open(filename.c_str());if(!of){cerr<<"openfail"<<endl;}of.close();}voidinsert()//写入用户指定的内容到指定文件{stringfilename,msg;cout<<"inputthefilename\n";cin>>filename;cout<<"inputsomethingyouwanttoinsert\n";cin>>msg;ofstreamout;out.open(filename.c_str());if(!out){cerr<<"openfail"<<endl;}out<<msg.c_str();out.close();}voidreadfile()//读取文件内容并显示{stringfilename;cout<<"inputthefilename\n";cin>>filename;ifstreamin;in.open(filename.c_str());if(!in){cerr<<"openfail"<<endl;}charbuffer[1024];while(!in.eof()){in.getline(buffer,100);}cout<<"===>"<<buffer<<endl;in.close();}voidcopyfile()//复制文件{stringifilename;cout<<"inputthefilenameofoldfile\n";cin>>ifilename;/*将文件内容读取到buffer中*/ifstreamin;in.open(ifilename.c_str());if(!in){cerr<<"openfail"<<endl;}charbuffer[1024];while(!in.eof()){in.getline(buffer,100);}in.close();/*将buffer中的内容写入新文件*/stringofilename,msg;cout<<"inputthefilenameofnewfile\n";cin>>ofilename;ofstreamout;out.open(ofilename.c_str());if(!out){cerr<<"openfail"<<endl;}out<<buffer;out.close();}voidexecutecommand(constchar*command,char*const*argv)//在子进程中执行路径为//command的程序,参数在argv中{intpid=fork();if(pid==0){if(execv(command,argv)==-1){cout<<"===>error\n";}}elsesleep(1);//等待子进程执行完毕}#filehanlder.cpp#include<iostream>#include"filehandler.h"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,mod.c_str()),strcpy(f,filename.c_str()),NULL};char*path="/bin/chmod";executecommand(path,argv);break;}case7://创立目录{stringfoldername;cout<<"inputthefoldername\n";cin>>foldername;charf[20];char*argv[]={"mkdir",strcpy(f,foldername.c_str()),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,foldername.c_str()),"-r",NULL};char*path="/bin/rm";executecommand(path,argv);break;}case10://切换目录{stringdir;cout<<"inputthepathyouwanttobe\n";cin>>dir;charp[30];if(chdir(strcpy(p,dir.c_str()))==-1){cout<<"failtochangedir"<<endl;}break;}case11://建立文件连接{stringoldpath,newpath;cout<<"inputoldpath\n";cin>>oldpath;cout<<"inputnewpath\n";cin>>newpath;charnp[30],op[34];if(link(strcpy(op,oldpath.c_str()),strcpy(np,newpath.c_str()))==-1){cout<<"failtochangedir"<<endl;} break;}case0:return0;default:cout<<"请选择0到11"<<endl;break;}cout<<"\n";}}程序分为filehandler.h和filehandler.cpp两部分,主要功能保存在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文件系统来获取系统的当前信息程序代码://File.c#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<fcntl.h>#include<sys/stat.h>#include<syslog.h>#include<string.h>#include<stdlib.h>#include<wchar.h>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(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东深圳市龙岗区坂田街道四季花城第二幼儿园招聘2人备考题库含答案详解(考试直接用)
- 2026四川省国有资产投资管理有限责任公司春季招聘4人备考题库附答案详解
- 2026四川甘孜州泸定县人民医院编外招聘工作人员5人备考题库附参考答案详解(培优b卷)
- 2026河北省中医院招聘劳务派遣人员43人备考题库附答案详解(b卷)
- 2026广西南宁隆安县城管大队招聘城管协管员1人备考题库含答案详解(培优a卷)
- 2025年智慧体育智能运动分析系统知识考察试题及答案解析
- 初中地理教学中地理信息系统与区域规划教学的课题报告教学研究课题报告
- 2025年注册消防工程师之《消防安全技术实务》模考模拟试题带答案详解(完整版)
- 2025年县乡教师选调考试《教育学》试卷附答案详解(满分必刷)
- 2025年县乡教师选调考试《教育学》常考点及答案详解【各地真题】
- 航空货运自查制度规范
- 统编版(2024)七年级上册历史第2课 原始农业与史前社会 素养提升教案
- 喉癌课件讲解
- 金属非金属矿山重大事故隐患判定标准
- 金华人工浮岛施工方案
- 十年(2016-2025)高考化学真题分类汇编:专题50 有机推断综合题-结构半知型+信息(原卷版)
- 人形图护理查房制作流程
- 黄山团建活动方案
- 2025湖北交投集团部分中层管理岗位竞聘上岗20人考前自测高频考点模拟试题及答案详解一套
- 病理技术细胞涂片的方法
- 2025年新装修产品委托代购协议书
评论
0/150
提交评论