天天看點

作業系統實驗一、 指令解釋程式的編寫

實驗一、指令解釋程式的編寫

一、 實驗目的

    (1)掌握指令解釋程式的原理;

    (2)掌握簡單的DOS調用方法;

    (3)掌握C語言程式設計初步。

二、 實驗内容和要求

     1、實驗内容:根據教師指定的實驗課題,完成設計、編碼、測試工作。

     2、實驗要求:編寫類似于DOS,UNIX的指令行解釋程式

      (1)自行定義系統提示符

      (2)自定義指令集(8-10個)

      (3)使用者輸入HELP以查找指令的幫助

      (4)列出指令的功能,區分内部還是外部指令

      (5)使用者輸入QUIT退出

      (6)内部指令有dir, cd, md, rd, cls, date, time, ren, copy等。

三、 實驗方法、步驟及結果測試

      1、實驗方法:運用C語言中的while循環語句來控制整個指令解釋程式,在循環内運用if和else if語句,條件就利用strcmp函數進行篩選。

      2、實驗步驟:先定義兩個字元串數組,一個存放輸入的顯示提示符,另一個提前定義好相關指令dir, cd, md, rd, cls, date, time, ren, copy等。然後用while循環語句嵌套if和else if語句。當輸入指令正确顯示此指令的解釋,若輸入為外部指令,顯示輸入錯誤需重新輸入。

      3、源代碼:

1 void process(struct Cmd cm[Max])
 2 {
 3 char str[10];
 4 printf("Microsoft Windows XP [版本 5.1.2600]\n");
 5 printf("(C) 版權所有 1985-2001 Microsoft Corp.\n");
 6 while(strcmp(str,"quit")!=0)//循環
 7 
 8 { 
 9 printf("\nC:\\Documents and Settings\\hskd>");
10 scanf("%s",str);
11 strlwr(str); 
12 bool flag=false;
13 if(strcmp(str,"help")==0)
14 {
15 printf("有關某個指令的詳細資訊,請鍵入 HELP 指令名\n");
16 display(cm);
17 flag=true;
18 }else{
19 for(int i=0;i<count;i++)
20 {
21 if(strcmp(str,cm[i].cmd)==0) //比較使用者輸入的字元串與檔案存儲的關鍵字指令名稱是否相等
22 {
23 if(cm[i].post==1)
24 {
25 printf("'%s' 内部指令輸入正确!\n該指令作用是:%s\n",str,cm[i].function);
26 printf("%s\n",&cm[i].parameters);
27 }
28 else
29 {
30 printf("'%s' 外部指令輸入正确!\n該指令作用是:%s\n",str,cm[i].function);
31 printf("%s",&cm[i].parameters);
32 }
33 flag=true;
34 break;
35 }
36 }
37 if(!flag){
38 if(strcmp(str,"quit")!=0)
39 printf("'%s' 不是内部或外部指令,也不是可運作的程式\n或批處理檔案。\n",str);
40 }
41 }
42 }
43 printf("\n程式結束!\n\n");
44 }      

4.運作結果及分析:

運作結果與預期一緻。

作業系統實驗一、 指令解釋程式的編寫
作業系統實驗一、 指令解釋程式的編寫

四、 實驗總結

     在這次用C語言編寫系統指令解程式中,不僅加強了對指令程式的編譯思路,同時回顧了C語言對檢索調用函數的使用,對以往大一的編寫函數進行回憶和加深使用,在寫解釋程式中,從剛開始的一味用代碼進行文字資料輸出,到調用數組和循環來化簡代碼量,達到一緻的效果。