1. Top » 
  2. C言語

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • Genre:

【C】コマンドラインオプションが引数を取る場合

コマンドラインオプションには引数を取るモノがある。
それもちゃっかりgetoptで扱うことが出来る。
今回は次のようなプログラムを考える。


  • オプション -n の後に引数があればそれを出力


#include <stdio.h>
#include <unistd.h>

int main(int argc, char** argv){
int opt;
while((opt = getopt(argc, argv, "n:")) != -1){
switch(opt){
case 'n':
printf("option n args:%s\n", optarg);
break;
case '?':
printf("option error \n");
break;
}
}
printf("main program output\n");
}


実はオプションに引数をもらいたい場合、その文字"n"と書いていたのを"n:"とする。
このオプション文字の後ろのコロン:が引数の要求という意味になる。

bash-3.2$ gcc -o optest2 optest2.c
※ 引数を与える場合
bash-3.2$ ./optest2.exe -n 10
option n args:10
main program output
※ 引数を与えない場合
bash-3.2$ ./optest2.exe -n
optest2: option requires an argument -- n ※エラーメッセージが出る。
option error
main program output




category of C:
【C】コマンドライン引数の取り方
【C】コマンドラインオプションの解析をしたい
スポンサーサイト

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

オプション解析の話のつまみとして、C言語でコマンドライン引数を取る方法の復習。

#include <stdio.h>

int main(int argc, char** argv){
int i;
printf("numbers of command line argument:%d\n", argc);
for(i=0; i<argc; i++)
printf("No.%d = %s\n", i, argv[i]);
return 0;
}

arg、文字列の配列の中には実行プログラム名も入ってしまうから注意が必要。

bash-3.2$ gcc -o argc argc.c
bash-3.2$ ./argc.exe a i u e o
numbers of command line argument:6
No.0 = ./argc
No.1 = a
No.2 = i
No.3 = u
No.4 = e
No.5 = o

【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】コマンドライン引数の取り方

Page Top

訪問者

お引っこし。 http://parabola.sblog.jp/

プロフィール

parabola0

Author:parabola0
Twitter用ですが…。
プロフィール

最新記事
最新コメント
最新トラックバック
カテゴリ
月別アーカイブ
検索フォーム
リンク

このブログをリンクに追加する

QRコード
QRコード
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。