c语言模拟shell命令行解释程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京联合大学

《操作系统课程设计》实验一:命令行解释程序

学院:信息学院专业:计算机科学与技术

课程:操作系统班级: 1 1 0 3 B 姓名:傅笔贵学号: 2009080305302

2014年7 月10 日

一.采用的数据结构说明

字符数组:

本程序中包含的字符数组有:

filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。

filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。

oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。

newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。

Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。

File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。

Word[100]:在Cdis()中存放用户要回显的字符串。

二.源程序清单、注释和流程图

(1)流程图

(2)源程序和注释

#include

#include

#include

#include

#include

#include

#include

int flag=1;

char ch[8];//存储文件读取内容的中间变量

FILE *fp;

FILE *fp1;

char filename1[20];/*复制文件候存放的原文件名*/

char filename2[20];/*复制文件候存放的目标文件名*/

char oldname[20];/*用来存放移动文件的源文件名*/

char newname[20];/*用来存放移动文件的目标文件名*/

void start_copy(char *filename1,char *filename2)

/*文件复制函数,可以实现文本和图片的复制*/

{

if((fp=fopen(filename1,"rb"))==NULL||(fp1=fopen(filename2,"wb"))==NUL L)

/*源文件或目标文件打开失败则无法进行复制*/

{

printf("can't open the source file!\n");

exit(0);

}

else

{

fread(ch,1,8,fp);//一次读取八个字节的字节流,存放到ch字符数组里

while (!feof(fp))//没读取到文件尾部时,持续读取

{

fwrite(ch,1,8,fp1);//写到目标文件里

fread(ch,1,8,fp);//继续读取

}

fclose(fp);//关闭指针,释放内存

fclose(fp1);

}

}

void Cend()

{

flag=0;//将循环条件flag=1变为0来结束循环,结束程序

}

void Cdir()

{

/*目录显示函数,除了调用Cmd没有更好的

解决办法,是本程序的遗憾.*/

system("cmd.exe /b dir");

}

void Ccopy()//文件复制主函数

{

scanf("%s%s",&filename1,&filename2);//获取源文件和目标文件名start_copy(filename1,filename2);//传参到复制函数

}

void Cerase()//删除文件函数

{

char File[20];//文件名存储

scanf("%s",&File);//获得文件名

if(remove(File)==0)//删除成功remove返回0

{

printf("Remove %s Successfully!\n",File);

}

else

{

perror("Failed!");

}

}

void Cdis()

{

char Word[100];//存放用户输入的字符串

getchar();//吸取第一个不必要的空格字符

gets(Word);//获得用户的字符串内容

printf("---------E---C---H---O-------------\n");

puts(Word);//显示用户的字符串内容

}

void Cmv()//移动或重命名文件函数

{

scanf("%s%s",&oldname,&newname);//用来获取用户输入的两个文件名rename(oldname,newname);

}

int main()

{

//定义判定字符

char cdir1[]="Cdir";

char cdir2[]="cdir";

char ccopy1[]="Ccopy";

char ccopy2[]="ccopy";

char cerase1[]="Cerase";

char cerase2[]="cerase";

char cdis1[]="Cdis";

char cdis2[]="cdis";

char cend1[]="Cend";

char cend2[]="cend";

char clr1[]="Cclr";

char clr2[]="cclr";

char cmv1[]="Cmv";

char cmv2[]="cmv";

char cuname1[]="Cuname";

char cuname2[]="cuname";

while(flag)

{

char Cho[100]={0};

char Cho2[6];

int num=0;

/*主菜单*/

printf("-----------------------------------\n");

printf("---------M E N U----------\n");

printf("-----------------------------------\n");

printf("Cdir . Show the Detail of Dir and files.\n");

printf("Ccopy . Copy the file.\n");

printf("Cerase . Erase(Delete) the file.\n");

printf("Cdis . The Echo of your input words\n");

printf("Cclr . Clear the Screen.\n");

printf("Cmv . Move Or Rename the file.\n");

printf("Cuname . Show CPU Info.\n");

printf("Cend . Quit.\n");

printf("\n");

printf("\n");

相关文档
最新文档