1、 Linux操作系统课程设计 31 2020年4月19日 文档仅供参考 Linux操作系统课程设计 班级:计算机13-2 学号: 姓名:谢甲山 成绩: 一、利用Linux有关系统调用函数编写一个简单的文件管理工具,要求实现以下功能(可在任意目录下操作)。 功能 说明(提示) 1.创立新文件 open(),close() 2.写文件 open(),write() 3.读文件 read() 4.复制文件 read(),write() 5.查看文件权限 需使用execv()函数执行”ls -l”命令实现 6.修改文
2、件权限 chmod() 7.创立目录 mkdir() 8.查看当前路径与目录 类同5 9.删除目录 rmdir() 10.切换目录 chdir() 11.建立文件链接 link() 0.退出 exit() 二、经过访问/proc文件系统来获取系统的当前信息,包括: (1)进程信息。包括:进程名称、运行状态、PID、优先级、内存使用量。可结束任一进程。 (2)系统信息。包括:处理器信息(CPU名称、CPU频率、CPU类型、缓存大小),操作系统信息(系统类型、系统版本、GCC编译版本)。 (3)内存资源。包括:内存和缓冲区(内核使用情况(已用、剩余、中共)、交换区
3、使用情况(已用、剩余、中共)),CPU使用率(各个核的使用率)。
(4)模块信息。包括:模块名称、内存使用、使用次数。可卸载任一模块。
一、利用Linux有关系统调用函数编写一个简单的文件管理工具
程序代码:
#filehandler.h
#include
4、 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; return option; } voi
5、d createfile() //以用户输入的文件名创立新文件
{
string filename;
cout<<"input the filename\n";
cin>>filename;
ofstream of;
of.open(filename.c_str ());
if (!of)
{
cerr<<"open fail"< 6、me, msg;
cout<<"input the filename\n";
cin>>filename;
cout<<"input something you want to insert\n";
cin>>msg;
ofstream out;
out.open(filename.c_str ());
if (!out)
{
cerr<<"open fail"< 7、readfile() //读取文件内容并显示
{
string filename;
cout<<"input the filename\n";
cin>>filename;
ifstream in;
in.open(filename.c_str ());
if (!in)
{
cerr<<"open fail"< 8、100);
}
cout<<"===>"< 9、rr<<"open fail"< 10、ofilename.c_str ());
if (!out)
{
cerr<<"open fail"< 11、mand, argv) == -1)
{
cout<<"===>error\n";
}
}
else
sleep(1); //等待子进程执行完毕
}
#filehanlder.cpp
#include 12、ion;
option = showmenu();
switch(option)
{
case 1: //创立新文件
createfile();
break;
case 2: //写入
insert();
break;
case 3: //读取
readfile();
break;
c 13、ase 4: //复制
copyfile();
break;
case 5: //查看权限
{
char * argv[] = {"ls","-l",NULL};
char * path = "/bin/ls";
executecommand(path, argv);
break;
}
case 6: //修改权限
{
14、 string filename;
string mod;
cout<<"input the filename\n";
cin>>filename;
cout<<"input the mode, r=4,w=2,x=1。 example:777 is rwxrwxrwx\n";
cin>>mod;
char f[20],m[10];
char * argv[] = { "chmod",
15、 strcpy(m, mod.c_str()),
strcpy(f, filename.c_str()),
NULL};
char * path = "/bin/chmod";
executecommand(path, argv);
break;
}
case 7: //创立目录
{
16、 string foldername;
cout<<"input the foldername\n";
cin>>foldername;
char f[20];
char * argv[] = {"mkdir",
strcpy(f, foldername.c_str()),
NULL};
char * path = "/bin/mkdir";
17、
executecommand(path, argv);
break;
}
case 8: //查看当前路径
{
char * argv[] = {"pwd", NULL};
char * path = "/bin/pwd";
executecommand(path, argv);
break;
}
case 9: //切换目录
18、 {
string foldername;
cout<<"input the foldername\n";
cin>>foldername;
char f[20];
char * argv[] = {"rm",
strcpy(f, foldername.c_str()),
"-r",
19、 NULL};
char * path = "/bin/rm";
executecommand(path, argv);
break;
}
case 10: //切换目录
{
string dir;
cout<<"input the path you want to be \n";
cin>>dir;
char p[30];
if 20、chdir(strcpy(p, dir.c_str())) == -1)
{cout<<"fail to change dir"< 21、nput new path\n";
cin>>newpath;
char np[30],op[34];
if (link(strcpy(op, oldpath.c_str()), strcpy(np, newpath.c_str())) == -1)
{cout<<"fail to change dir"< 22、
default:
cout << "请选择0到11" << endl;
break;
}
cout<<"\n";
}
}
程序分为filehandler.h和filehandler.cpp两部分,主要功能保存在filehandler,h中,由showmenu()函数显示菜单,createfile()函数创立新文件,insert()函数写文件,readfile()函数读文件,copyfile()函数复制文件,executecommand()函数执行命令。filehandler 23、pp文件中,主函数为一个死循环,调用showmenu()函数显示菜单、获取用户选择的选项,之后经过switch匹配相应的函数。
实验截图:
之后运行程序,显示菜单,接着我们一个一个功能测试
选择功能1并输入文件名后,能够看到文件夹中确实创立了新文件
选择功能2之后、输入要写入的文件的文件名,再输入要写入的内容
选择功能3之后,输入要读取的文件的文件名,在提示符” ===》”之后的是文件内容
选择功能4,依次输入旧文件名,新文件名
选择功能5,调用命令ls查看权限
选择功能6,输入文件名 24、xiexie,并输入777之后再选择功能5,能够看到test2的权限变成了rwxrwxrwx
选择功能7,输入新目录的名字
选择功能8,查看当前目录
选择功能9,输入刚才创立的目录的目录名,确实删除了
选择功能10,切换到/home目录
经过功能10切换会之前的shiyan6目录之后,选择功能11,创立filehandler.h的文件连接
二、经过访问/proc文件系统来获取系统的当前信息
程序代码:
//File.c
#include 25、
#include 26、oose!=0) {
switch(choose) {
case 1:PIF();
break;
case 2:SIF();
break;
case 3:MIF();
break;
case 4:BIF();
break;
default:printf("**************没有该选项,请重新输入**************\n");
}
menu();
scanf("%d",&choose);
}
return 0;
}
void menu(void) {
printf("************ 27、 \n");
printf("*********亲爱的用户请输出你需要的操作********* \n");
printf("**************1.查看进程信息***************** \n");
printf("**************2.查看系统信息*************** \n");
printf("**************3.查看内存资源************** \n");
printf("**************4.查看模块信 28、息************** \n");
printf("**************0.退出该系统************** \n");
printf("*************************************** \n");
printf("**************请输入1-4*************\n");
}
void PIF(void) {
char *pa = "/usr/bin/X11/top";
char *arg[4] = {"top", NULL};
if(f 29、ork()==0) {
printf("*****现在正在进入进程信息界面****** \n");
execv(pa,arg);
printf("ps:在该界面你能够输入k进行杀死进程,输入k之后再输入进程编号(PID)号\n");
printf("ps:如果你想要退出该界面,能够输入q进行退出 \n");
}else{
wait(0);
}
}
void SIF(void) {
printf("------------------------------------- \n");
printf("*** 30、 系统信息如下 *** \n");
printf("------------------------------------- \n");
if(fork()==0) {
execlp("/bin/cat","cat","/proc/version",NULL);
}else{
wait(0);
}
printf("------------------------------------- \n");
printf("*** 处理器信息如下*** *** \n");
printf("-------------------------- 31、 \n");
if(fork()==0) {
execlp("/bin/cat","cat","/proc/cpuinfo",NULL);
}else{
wait(0);
}
}
void MIF(void) {
printf("------------------------------------- \n");
printf("*** 有关内存的信息如下*** \n");
printf("------------------------------------- \n");
if(fork()==0) {
32、
execlp("/bin/cat","cat","/proc/meminfo",NULL);
}else{
wait(0);
}
}
void BIF(void){
printf("------------------------------------- \n");
printf("*** 所有模块信息如下(谨慎卸载)*** \n");
printf("------------------------------------- \n");
char *path = "/bin/lsmod";
char *argv[4] = {"l 33、smod", NULL};
if(fork()==0) {
execv(path,argv);
}else{
wait(0);
}
printf("------------------------------------- \n");
char name[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++有很多相似之处,经过查看资料还是能搞明白。






