【C】コマンドラインオプションの解析をしたい

コマンドラインオプションとはコマンドの後ろについているやつのこと。
これを使うと、コマンドに「〜して」とか「〜しないで」とか指示できる。
結構メジャーなところでいうとdirもしくはlsのコマンドがある。

ls 通常表示
ls -l リスト表示
ls -a 全部表示
ls -al 全部リスト表示

などなど。
これをC言語で解析する。
ただしこの関数だと1文字のバージョンのみ。
コンパイラオプションには-lなど1文字で指定するものと–helpなどのように文字列で指定するモノがある。
getopt関数ではとりあえず1文字指定のもののみ使える。

#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv){
int opt;
while((opt = getopt(argc, argv, "abc")) != -1){
switch(opt){
case 'a':
printf("option a\n");
break;
case 'b':
printf("option b\n");
break;
case 'c':
printf("option c\n");
break;
case '?':
printf("fault\n");
break;
}
}
printf("main program output\n");
}
これは次のような実行結果になる。

d:\taki\program\clinux>optest.exe -a -b -c
option a
option b
option c
main program output
d:\taki\program\clinux>optest.exe -a -b -c -d
option a
option b
option c
optest: unknown option — d
fault
main program output
d:\taki\program\clinux>optest.exe -abc
option a
option b
option c
main program output

コンパイラオプション(1文字)はくっつけても話してもバラバラに出来る。
この関数のキーポイントは真ん中にあるwhile文のところ。

 while((opt = getopt(argc, argv, "abc")) != -1){
switch(opt){
----
ここで、オプションとしてa,b,cの3つを見つけてくれる。
それ以外の場合はswitch文の?に該当する。
ところでオプションが引数を持つ場合があるのだけれどもその場合はどうするのか。
それはまた次回?

category of C:
【C】コマンドライン引数の取り方

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です