[コマンドオプションを実現するには?メイン関数の入力パラメータ argc、argv を考えることができます]
コース内容#
getopt 関数#
【コマンドライン解析関数】
- <unistd.h> → Unix Standard
- ⭐関数プロトタイプ
- int getopt(int argc, char * const argv[], const char *optstring);
- 推測
- 戻り値 int
- ① 0:成功;-1:失敗
- ② ≥0:成功;<0:失敗
- 形参 argc、argv:メイン関数の形参のように
- 形参 optstring:オプション文字列
- 戻り値 int
- man マニュアルを確認:man 3 getopt
- 戻り値は文字 [オプション] または - 1
- 戻るときに外部変数 optind と静的変数 nextchar が更新される
- オプションがなくなると、-1 を返し、optind は argv の最初の要素の位置に移動する [オプションではない]
- argc、argv
- メイン関数のパラメータから直接渡される
- optstring
- 意味:すべての合法なオプション文字からなる文字列
- 単一の文字はオプションを表す
- 単一の文字の後にコロンが続く場合
- 一つのコロンは、そのオプションの後に必ずパラメータ値が続くことを示す
- パラメータはオプションの後に続くか、スペースで区切られる
- [コマンド内のオプションパラメータの存在に似ている]
- 二つのコロンは、オプションの後のパラメータがオプションであることを意味する
- パラメータがある場合、必ずオプションの後に続かなければならず、スペースを使ってはいけない
- パラメータのポインタは optarg に割り当てられる [二つのコロンの場合、デフォルトは 0←null]
- 一つのコロンは、そのオプションの後に必ずパラメータ値が続くことを示す
- 例
- x、y、z は 3 つのオプションを表す
- getopt () を繰り返し呼び出すことで、複数のオプションを読み取ることができる、例:-al -h
- 一部のグローバル変数
-
- optarg:コロンがある場合、オプションパラメータを抽出できる
- optind
- 意味:argv 配列の次の要素 [文字] のインデックス
- 呼び出し元がこれを 1 にリセットすると、argv を再スキャンできる
- [PS] 外部変数;ポインタのようなもの
- 直接使用できる [宣言は不要]、なぜなら【参照されたヘッダーファイル】でこれらの変数が定義されているから
- 外部変数の概念
-
- 戻り値は文字 [オプション] または - 1
コードデモ#
getopt#
-
- flag、switch の使い方を学ぶ
- 【コロンの意味】必須 / オプションの選択パラメータ
- getopt に関連するグローバル変数に注意し、直接使用できる
- exit () は非 0 の値を使用して異常終了を示すことができる
- プログラム結果
-
- 参考用
-
追加知識点#
考察点#
ヒント#
- ⭐小課題:C 言語で ls -al コマンドを実装する
- フローチャートを使って思考を整理することを学ぶ、推奨ProcessOn—— オンラインフローチャート作成ウェブサイト
-
- 宿船からの簡易フローチャート
-
- フローチャートを使って思考を整理することを学ぶ、推奨ProcessOn—— オンラインフローチャート作成ウェブサイト
- コマンドを初めて学ぶときは、変種にあまり注意を払わない
- vim で、入力でソースコードの構造化ビューを確認できる
- ctags の一般的な操作:ctrl + ] 定義にジャンプ、ctrl + o 戻る