あとは自分で決めたルールに従いパースすればよい。ある程度標準的な方法をとった方がプログラマ・ユーザ双方にとってメリットがある。いった形でまとめて指定しても同じ意味になる。いった引数を持つオプションという概念があったりする。それに習って同じように使えるようにするのが良いはずだ。そこで、そういった引数の扱い方をフォローしてくれる関数が用意されている。使って調べると以下の様な定義が出てくる。各定義が記述されている場合が多いようだ。main関数の引数をそのまま渡せば良い。この関数で処理するオプションを列挙した文字列である。詳細は以下のサンプルプログラムを動かしながら説明しよう。0;}cparam/dparamのprintfでの文字列出力で、値がNULLだった場合のケアを入れていない。引数の値がNULLの場合"(null)"と出力されることを確認し、余計なコードを省くため削除した。環境によってはハングする可能性があるのでご注意を。同等の動作になると思う。abcdの4種類のオプションを処理する、という意味だ。(コロン)は、その直前のオプションが引数を持つことを示している。(......ややこしいが、引数を保つ場合も持たない場合もどちらもある)という意味になる。abcdという4つのオプションがあり、cは引数必須、dは引数オプション。どちらで記述しても同じ意味になっている。指定された回数同じオプションを返す。順序を逆に指定すると当然取り出される順序は異なるが、最終的に立てられるフラグは変わらない。見つけたオプション文字(char)の値を戻り値(int)として返す。エラーとして負の値を返すために、戻り値がcharではなく、intになっている。ない引数をつけて実行してみよう。コード上に記述していないメッセージ、これはgetoptが出力をしている。戻り値として返っている。それを無視して実行を続ける、という実装でも良いだろう。そこは作ろうとしているプログラムの仕様に合わせてご自由に。getopt()は関数単体で完結している処理ではなく、グローバルスコープの変数を使っている。それが定義のところに書かれている。自体がエラーメッセージを出力しなくなる。処理を始める前に書いておくと良い。どのように入力されたかが知りたい場合はこれを利用する。次に、引数を持つオプションを試してみる。そこを指すポインタが代入されるので、そこから取得する。このポインタの参照先は処理中に変化するわけではないので、そのままポインタを保存しても問題ない。続けて書いても同じように処理される。その都合上、利用者は引数を個別に書かずまとめて書く場合、引数を取るオプションは最後に指定する必要がある。次の空白までがそのオプションの引数であり、オプションとしては処理されないからだ。指定したことにはならない。次に、引数を取るオプションに引数を書かなかった場合。(null)と、このように、コロン1つの場合、引数は必須なので、指定したオプションとは違う扱いになる。コロン2つの場合は、引数はオプションなので、引数なし(NULL)で処理される。bbbbgetoptはargvの並び順を変更し、オプション以外の引数は、末尾にまとめるように動作する。次に処理する引数のindexを示している。オプション以外の引数の先頭を示している。そこで、サンプルプログラムでは残りの引数を表示させている。それ以外をオプションとする場合。残った引数をこのようにして取り出す。オプションとそれ以外の引数の位置は前でも後ろでも同様に処理できる。解析の結果そのオプションが指定されていなければエラーとすれば良い。これを利用すれば、既存のコマンドラインツール群と同じようなインターフェースのツールを自作することができる。自分で作って自分で使うだけならいくらでも自由な仕様でいいし、引数の解析方法も自由にやればいいと思う。この方法をおすすめする。更新情報2018/07/28lsっぽいコマンドを作る13アップしました。2018/07/13lsっぽいコマンドを作る12アップしました。2017/01/04lsっぽいコマンドを作る11アップしました。2017/01/03lsっぽいコマンドを作る10アップしました。(https://commoncrawl.org/faq/)。