1Linux操作系统课程设计班级:计算机13-2学号:13034480232姓名:谢甲山成绩:一、利用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)模块信息。包括:模块名称、内存使用、使用次数。可卸载任一模块。2一、利用Linux有关系统调用函数编写一个简单的文件管理工具程序代码:#filehandler.h#includeiostream#includestring.h#includefstream#includeunistd.husingnamespacestd;intshowmenu()//显示菜单,在主函数中循环调用。返回用户选择的选项。{intoption;cout1.创建新文件\n;cout2.写文件\n;cout3.读文件\n;cout4.复制文件\n;cout5.查看文件权限\n;cout6.修改文件权限\n;cout7.创建目录\n;cout8.查看当前路径与目录\n;cout9.删除目录\n10.切换目录\n;cout11.建立文件链接\n0.退出\n;cinoption;returnoption;}voidcreatefile()//以用户输入的文件名创建新文件{stringfilename;coutinputthefilename\n;cinfilename;ofstreamof;of.open(filename.c_str());3if(!of){cerropenfailendl;}of.close();}voidinsert()//写入用户指定的内容到指定文件{stringfilename,msg;coutinputthefilename\n;cinfilename;coutinputsomethingyouwanttoinsert\n;cinmsg;ofstreamout;out.open(filename.c_str());if(!out){cerropenfailendl;}outmsg.c_str();out.close();}voidreadfile()//读取文件内容并显示{stringfilename;coutinputthefilename\n;cinfilename;ifstreamin;in.open(filename.c_str());if(!in)4{cerropenfailendl;}charbuffer[1024];while(!in.eof()){in.getline(buffer,100);}cout===bufferendl;in.close();}voidcopyfile()//复制文件{stringifilename;coutinputthefilenameofoldfile\n;cinifilename;/*将文件内容读取到buffer中*/ifstreamin;in.open(ifilename.c_str());if(!in){cerropenfailendl;}charbuffer[1024];while(!in.eof()){in.getline(buffer,100);}in.close();5/*将buffer中的内容写入新文件*/stringofilename,msg;coutinputthefilenameofnewfile\n;cinofilename;ofstreamout;out.open(ofilename.c_str());if(!out){cerropenfailendl;}outbuffer;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#includeiostream6#includefilehandler.husingnamespacestd;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;7}case6://修改权限{stringfilename;stringmod;coutinputthefilename\n;cinfilename;coutinputthemode,r=4,w=2,x=1。example:777isrwxrwxrwx\n;cinmod;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;coutinputthefoldername\n;cinfoldername;charf[20];char*argv[]={mkdir,strcpy(f,foldername.c_str()),NULL};char*path=/bin/mkdir;executecommand(path,argv);break;}8case8://查看当前路径{char*argv[]={pwd,NULL};char*path=/bin/pwd;executecommand(path,argv);break;}case9://切换目录{stringfoldername;coutinputthefoldername\n;cinfoldername;charf[20];char*argv[]={rm,strcpy(f,foldername.c_str()),-r,NULL};char*path=/bin/rm;executecommand(path,argv);break;}case10://切换目录{stringdir;coutinputthepathyouwanttobe\n;cindir;charp[30];if(chdir(strcpy(p,dir.c_str()))==-1){coutfailtochangedirendl;}break;}9case11://建立文件连接{stringoldpath,newpath;coutinputoldpath\n;cinoldpath;coutinputnewpath\n;cinnewpath;charnp[30],op[34];if(link(strcpy(op,oldpath.c_str()),strcpy(np,newpath.c_str()))==-1){coutfailtochangedirendl;}break;}case0:return0;default:cout请选择0到11endl;break;}cout\n;}}程序分为filehandler.h和filehandler.cpp两部分,主要功能保存在filehandler,h中,由showmenu()函数显示菜单,createfile()函数创建新文件,insert()函数写文件,readfile()函数读文件,copyfile()函数复制文件,executecommand()函数执行命令。filehandler.pp文件中,主函数为一个死循环,调用showmenu()函数显示菜单、获取用户选择的选项,之后通过switch匹配相应的函数。10实验截图:之后运行程序,显示菜单,接着我们一个一个功能测试选择功能1并输入文件名后,可以看到文件夹中确实创建了新文件11选择功能2之后、输入要写入的文件的文件名,再输入要写入的内容选择功能3之后,输入要读取的文件的文件名,在提示符”===》”之后的是文件内容12选择功能4,依次输入旧文件名,新文件名选择功能5,调用命令ls查看权限选择功能6,输入文件名xiexie,并输入777之后再选择功能5,可以看到test2的权限变成了rwxrwxrwx13选择功能7,输入新目录的名字14选择功能8,查看当前目录选择功能9,输入刚才创建的目录的目录名,确实删除了选择功能10,切换到/home目录15通过功能10切换会之前的shiyan6目录之后,选择功能11,创建filehandler.h的文件连接二、通过访问/proc文件系统来获取系统的当前信息程序代码://File.c#includestdio.h#includesys/types.h16#includeunistd.h#includefcntl.h#includesys/stat.h#includesyslog.h#includestring.h#includestdlib.h#includewchar.hvoidmenu(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;}17voidmenu(void){printf(***************************************\n);printf(*********亲爱的用户请输出你需要的操作*********\n);printf(**************1.查看进程信息