c语言模拟shell命令行解释程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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");