- 程式 mfun1.c 計算命令列傳送所有參數的平均值,編譯成可執行檔 mfun1。輸入輸出範例如下,浮點數輸出只取小數點 3 位。
./mfun1 100 -22 33
111/3=37.000
./mfun1 100 -22 33 10
121/4=30.250
- 請寫一程式 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
- 講義中 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
- 講義中 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
- 寫一程式 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