Linux操作系统课程设计.docx

上传人:b****5 文档编号:29877051 上传时间:2023-08-03 格式:DOCX 页数:24 大小:1.42MB
下载 相关 举报
Linux操作系统课程设计.docx_第1页
第1页 / 共24页
Linux操作系统课程设计.docx_第2页
第2页 / 共24页
Linux操作系统课程设计.docx_第3页
第3页 / 共24页
Linux操作系统课程设计.docx_第4页
第4页 / 共24页
Linux操作系统课程设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

Linux操作系统课程设计.docx

《Linux操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《Linux操作系统课程设计.docx(24页珍藏版)》请在冰豆网上搜索。

Linux操作系统课程设计.docx

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++有很多相似之处,通过查看资料还是能搞明白。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1