C言語-コマンドの作成 |
2-2 mtype
【名前】 mtype - 指定した複数のファイルの内容を表示する。
【書式】 mtype filename1 [filename2 ...]
【解説】 指定されたファイルの内容を連続して表示する。UNIXのcatコマンドに似たものである。
使用例
mtype abc def … ファイルabcとdefの内容を表示する。
mtype a1 a2 a3 a4 a5 … ファイルa1, a2, a3, a4とa5の内容を表示する。
【参照】 atype のファイルオープンからクローズまでを指定したファイルの数だけ繰り返す。
【フローチャート・ソースリスト】(一部分 atype参照)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: |
#include <stdio.h> #include <stdlib.h> #define STRING_MAX 256 /* 最大文字長の定義 */ int main(int argc, char *argv[]) { FILE *filep; char buff[STRING_MAX]; int pnum; /* パラメータ数 */ if(argc < 2){ /* パラメータ数のチェック */ printf("Usage : MTYPE filename1 [filename2 ...]\n"); exit(1); } for(pnum = 1; pnum < argc; ++pnum){ /* ファイル数分繰り返す */ if((filep = fopen(argv[pnum], "r")) == NULL){ /* オープンチェック */ printf("can not open file. %s\n", argv[pnum]); exit(2); } while(fgets(buff, STRING_MAX, filep) != NULL) /* 1行読み込み */ printf("%s", buff); /* 1行表示 */ fclose(filep); /* クローズ */ } return(0); } |
mtype の別バージョン(変数の使用数を減らし、ポインタを利用)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: |
#include <stdio.h> #include <stdlib.h> #define STRING_MAX 256 /* 最大文字長の定義 */ int main(int argc, char *argv[]) /* → int main(int argc, char **argv) */ { /* でも良い */ FILE *filep; char buff[STRING_MAX]; if(argc < 2){ /* パラメータ数のチェック */ printf("Usage : MTYPE filename1 [filename2...]\n"); exit(1); } while(--argc){ /* ファイル数分繰り返す */ ++argv; if((filep = fopen(*argv, "r")) == NULL){ /* オープンチェック */ printf("can not open file. %s\n", *argv); exit(2); } while(fgets(buff, STRING_MAX, filep) != NULL) /* 1行読み込み */ printf("%s", buff); /* 1行表示 */ fclose(filep); /* クローズ */ } return(0); } |
argcには、パラメータ数+1の値が格納されているので、15行目で1減じてからwhileの判定をする。whileは、argcが0になるまで繰り返す。
argvは、コマンドラインの最初のパラメータ(コマンド名)のアドレスを示しているので、16行目で加算している。
例 mtype aaa1 bbb2 ccc3 ddd4 と入力した場合
Copyright © 2001 Hiroshi Masuda |