以命令行方式进行人机交互的程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
current_directory(curdir); printf("%s#>", curdir);
/*获取输入*/ li_inputlen=0; lc_char=getchar(); while(lc_char != '\n'){ if(li_inputlen < BUFFERSIZE)
buffer[li_inputlen++]=lc_char; lc_char=getchar();
printf("20inputed command is:%s\n",arg[i]); #endif filename=(char *)malloc( sizeof(char) * strlen(arg[1]) ); strcpy(filename,arg[1]); #ifdef DEBUG printf("27filename is:%s\n",filename); #endif if( (stream=fopen(filename,"r")) == NULL ){
一、目的和要求 1. 实验目的
(1)掌握命令解释程序的原理; (2)掌握简单的系统调用方法; (3)掌握 C/C++语言编程初步。
2.实验学时:4 学时 3.实验要求: 使用 C/C++编程语言编写一个以命令行方式进行人机交互的程序。使用者输入命令,程序负 责解释并执行。 二、实验内容 设计编写一个以命令行方式进行人机交互的程序。使用者输入命令,程序负责解释并执行。 完成设计、编码、测试工作。具体要求如下: 1。进入系统时显示:”WELCOME TO SIMULAR OPERATION SYSTEM!”的欢迎界面; 2。自定义系统提示符,如“C:>”; 3。要求实现的命令集 1)ls 命令:列出目录文件; 2)pwd 命令:列出当前目录; 3)help 命令:列出当前系统可用命令集及其功能;
free(input);
#ifdef DEBUG for(i=0;i<k;i++) printf("116inputed command is:%s\n",arg[i]); #endif
/*采用条件判断,处理 arg 中的命令*/ if(strcmp(arg[0],"dir") == 0){ /*printf("dir command\n");*/ dir(); for(i=0;i<k;i++)
int era(char *arg[],int k) { if(unlink(arg[1]) != 0){
printf("file delete fail!\n"); return 0; } else printf("file %s deleted!\n",arg[1]); return 0; }
int dis(char *arg[],int k) { int i,count; char *filename,ch; FILE *stream; #ifdef DEBUG for(i=0;i<k;i++)
/*将命令从缓存拷贝到 input 中*/ input = (char *)malloc(sizeof(char)*(li_inputlen+1)); strcpy(input,buffer);
#ifdef DEBUG printf("89inputed command is:%s\n",input); #endif
}
/*对只含回车符的命令处理*/ if(li_inputlen == 0) continue;
/*命令超长处理*/ if(li_inputlen >= BUFFERSIZE){ printf("yoyr command is too long!Please re-enter!\n"); li_inputlen=0; continue; } else buffer[li_inputlen] = '\0';
creat(arg[2],S_IWRITE); if( (files=fopen(arg[1],"r")) == NULL ){
fprintf(stderr, "Cannot open source file.\n"); return 1; } if( (filed=fopen(arg[2],"w")) == NULL ){ fprintf(stderr, "Cannot open destination file.\n"); return 1; } do{ ch=fgetc(files); fputc(ch,filed); }while(ch!=EOF); fclose(files); fclose(filed); printf("copyed: form %s to %s!\n",arg[1],arg[2]); return 0; }
/*#define DEBUG*/
#include <dir.h> #include <stdio.h> #include <string.h> #include <io.h> #include <sys\stat.h>
Байду номын сангаас
#define BUFFERSIZE 80
int cop(char *arg[], int k) { FILE *files,*filed; char ch;
}
int main()
{
char *input,*arg[10];
int li_inputlen;
char lc_char,buffer[BUFFERSIZE];
int i,j,k;
char curdir[MAXPATH]; printf("Welcome To Simular Simple Command Line OS System!\n"); while(1){ /*取当前目录*/
free(arg[i]); continue; } if(strcmp(arg[0],"cop") == 0){ /*printf("cop command\n");*/ cop(arg,k); for(i=0;i<k;i++) free(arg[i]); continue; } if(strcmp(arg[0],"era") == 0){ /*printf("era command\n");*/ era(arg,k); for(i=0;i<k;i++) free(arg[i]); continue; } if(strcmp(arg[0],"dis") == 0){ /*printf("dis command\n");*/ dis(arg,k); for(i=0;i<k;i++) free(arg[i]); continue; } if(strcmp(arg[0],"end") == 0){ /*printf("end command\n");*/ for(i=0;i<k;i++) free(arg[i]); break; } else{ printf("command not find,Please re-input!\n"); for(i=0;i<k;i++)
/*获取命令和参数*/ for(i=0,j=0,k=0;i<=li_inputlen;i++){ /*处理空格、TAB 和结束符*/ if(input[i] == ' ' || input[i] =='\t' || input[i] == '\0'){
if(j==0) /*略去连在一起的多个空格或回车*/ continue; else{ buffer[j++]='\0'; arg[k]=(char *)malloc(sizeof(char)*j); /*将指令拷贝到 arg 中*/ strcpy(arg[k],buffer); j=0; k++; } } else{ buffer[j++] = input[i]; } }
/*printf("%d\t\t%s\n",ffblk.ff_fsize,ffblk.ff_name);*/
printf("%12s\t",ffblk.ff_name); printf("%12ld\n",ffblk.ff_fsize); /*printf("%d\n",ffblk.ff_attrib);*/ count++; if(count == 20){
free(arg[i]); continue; }
} #ifdef DEBUG getchar(); #endif
return 0; }
4)chdir 命令:更换当前目录; 5)date 命令:查看系统时间; 6)cls 命令:清除屏幕; 7)chkdsk 命令:检查系统磁盘状态; 8)ver 命令:查看当前系统版本号。 4。用户输入“quit”命令退出系统。 三、实验步骤 1.查阅网络资料,了解命令解释程序的含义; 2.在 WINDOWS 操作系统下键入“CMD”命令,进入 DOS 提示符环境,输入 HELP 命令,查 看系统可用命令集并尝试去使用它们。 3.查阅资料,思考如何实现命令解释程序。 4.编写程序实现命令解释程序,程序的调错与测试。 5.完成实验报告内容。
fprintf(stderr, "Cannot open file.\n"); return 1; } clrscr(); printf("filename:%s\n\n",filename); count=0; ch=fgetc(stream); while (ch!=EOF){ if(ch == '\n'){ count++; if(count == 23){ count=0; getchar(); } } putchar(ch); ch=fgetc(stream); } printf("\n\nend of file!\n"); fclose(stream); free(filename); return 0; }
*/
path[0] = 'A' + getdisk(); /* replace X with current drive letter
*/
getcurdir(0, path+3); /* fill rest of string with current directory
*/
return(path);
getchar(); count=0; } done = findnext(&ffblk); } return 0; }
char *current_directory(char *path)
{
strcpy(path, "X:\\");
/* fill string with form of response: X:\
int dir() {
struct ffblk ffblk; int done; int count; printf("Directory listing of *.*\n"); printf("\tname\t\tsize\n"); done = findfirst("*.*",&ffblk,'?'); count=0; while (!done) {
相关文档
最新文档