[どのようにコマンドオプションを実現しますか?主な関数の入力パラメータ 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
- 意味:すべての有効なオプション文字で構成される文字列
- 単一の文字はオプションを表す
- 単一の文字の後にコロンが続く場合
- 1 つのコロン:そのオプションの後にパラメータ値が必要
- パラメータはオプションの直後に続くか、スペースで区切られる
- [コマンドのオプションパラメータの存在に似ています]
- 2 つのコロン:オプションの後のパラメータはオプションです
- パラメータがある場合、オプションの直後に続く必要があり、スペースは使用できません
- パラメータのポインタは optarg に割り当てられます [2 つのコロンの場合、デフォルトは 0←null]
- 1 つのコロン:そのオプションの後にパラメータ値が必要
- 例
- x、y、z は 3 つのオプションを表します
- getopt () を繰り返し呼び出すことで、複数のオプションを読み込むことができます。例:-al -h
- いくつかのグローバル変数
- optarg: コロンがある場合、オプションのパラメータを抽出できます
- optind
- 意味: argv 配列の次の要素 [文字] のインデックス
- 呼び出し元が 1 にリセットすると、argv を再スキャンできます
- [PS] 外部変数;ポインタのようなもの
- 宣言する必要はなく、直接使用できます [すべての変数は定義済みのヘッダーファイルで定義されているため]
- 外部変数の概念
- 戻り値は文字 [オプション] または - 1
コードデモ#
getopt#
- flag、switch の使用方法を学ぶ
- 【コロンの意味】必須 / オプションのオプションパラメータ
- getopt 関連のグローバル変数に注意し、直接使用できます
- exit () は非正常な終了を示すために非 0 の値を使用できます
- プログラムの結果
- 参考までに
追加知識#
考えるポイント#
Tips#
- ⭐小課題:C 言語を使用して ls -al コマンドを実装する
- フローチャートを使用してアイデアを整理する方法を学ぶ。ProcessOnをおすすめします - オンラインフローチャート作成ウェブサイト
- 宿船からの簡単なフローチャート
- フローチャートを使用してアイデアを整理する方法を学ぶ。ProcessOnをおすすめします - オンラインフローチャート作成ウェブサイト
- コマンドを初めて学ぶときは、バリエーションにあまり注意を払う必要はありません
- vim では、を入力すると、ソースコードの構造化ビューを表示できます
- ctags の一般的な操作:ctrl + ] 定義にジャンプ、ctrl + o 戻る