next up previous contents
Next: 函式 Up: main 函式 Previous: 錯誤訊息回傳函式 perror   Contents

實機練習題

  1. 共同要求:
    1. 在家目錄下建立 zzz 目錄。
    2. 切換工作目錄到 zzz,所有練習皆存在此目錄。
    3. 題目沒要求的,不要多做,除題目輸出範例要求的空白外,不要多加任何空白或空白行。
  2. 撰寫 C 語言程式
    1. 程式 mfun1.c 計算命令列傳送所有參數的平均值,編譯成可執行檔 mfun1。輸入輸出範例如下,浮點數輸出只取小數點 3 位。
      ./mfun1 100 -22 33
      111/3=27.750
      ./mfun1 100 -22 33 10
      121/4=24.200
      
    2. 請寫一程式 mfun2.c 從命令列傳入兩個整數 a 及 b,如果 a>b 表示錯誤,印出 ERROR 及換行符號,回傳一非 0 的數字,a<b 則印出 CORRECT 及換行符號並回傳 0,表示輸入正確,程式成功執行並結束,編譯成可執行檔 mfun2,輸入輸出驗證範例如下:
       ./mfun2 2 3
      CORRECT
      echo $?
      0
      ./mfun2 10 2
      ERROR
      echo $?
      1
      
    3. 講義中 mainfun3.c 錯誤碼固定回傳 2,請寫一程式 mfun3.c 不印錯誤碼,改成回傳正確的錯誤碼,編譯成可執行檔 mfun3,輸出範例如下:
      ./mfun3 a b
      File renaming error File not found
      echo $?
      2
      
      ./mfun3 b /root/b
      File renaming error Permission denied
      echo $?
      13
      
    4. 講義中 mainfun4.c 錯誤碼固定回傳 2,請寫一程式 mfun4.c 不印錯誤碼,改成回傳正確的錯誤碼,且錯誤訊息必須輸出到 stderr,編譯成可執行檔 mfun4。
      ./mfun4 a b >/dev/null
      File renaming error File not found
      echo $?
      2
      ./mfun4 b /root/b >/dev/null
      File renaming error Permission denied
      echo $?
      13
      ./mfun4 /sbin/blkid b >/dev/null
      File renaming error Unknown error
      echo $?
      18
      ./mfun4 b a 2>/dev/null
      0: b renamed to a
      echo $?
      0
      
    5. 寫一程式 mfun5.c 從命令列傳入一參數指定要檢查的檔案,使用 access 函式「依序」檢查檔案是否存在 (F_OK)?可讀(R_OK)?可寫(W_OK)?可執行(X_OK)?檢查結果以 perror 函式輸出錯誤訊息,退出程式回傳錯誤碼 errno,編譯成可執行檔 mfun5,access 函式用法如下:
      #include <unistd.h>
      int access(const char *pathname, int mode);
      
      mode: F_OK R_OK W_OK X_OK
      
      執行輸出範例如下:
      ./mfun5 a >/dev/null
      F_OK: No such file or directory
      echo $?
      2
      touch a
      ./mfun5 a >/dev/null
      X_OK: Permission denied
      echo $?
      13
      chmod 777 a
      ./mfun5 a 2>/dev/null
      a OK
      echo $?
      0
      


De-Yu Wang 2019-09-19