2011-08-15 2 views
4

これまでは、getopt_longを使用して、コマンドラインCプログラムのオプションを解析してきました。Cの引数の前後のコマンドラインオプションの処理

オプションでない引数にヒットしたときに、getopt_longの解析を停止する方法はありますか?もしそうでなければ、C言語でこれを処理する最良の方法は何ですか?例を与えることを

、私はgitと同様にコマンドを処理するために好きで、それの後にコマンドの前に一般的な引数、およびコマンド固有の引数を持っていると思います:

git [general options] <command> [command options] 

例:

-acommitコマンドに特異的であり、そして -s特定一方
git --bare commit -a 
git -p --bare status -s 

-p--bareは、一般的なオプションであり、すべてのコマンドで使用することができstatusコマンドに送信します。

getopt_longを使用すると、最初にすべてのオプションを解析し、非オプション引数をそのまま処理します。私は理想的には、非オプション(つまりコマンド)を打ち、残りの引数をコマンド固有のオプションパーサーに渡すと、解析を停止したいと考えています。

答えて

6

GNU Getoptのマニュアルは言う:

POSIXは、次の動作を要求:最初のオプションは、オプションの処理を停止します。このモードは、環境変数POSIXLY_CORRECTを設定するか、options引数の文字列をプラス記号( '+')で始めることによって選択されます。

+1

+1。これはLinuxプログラマーズ・マニュアル、つまりLinuxのマンページには表示されていますが、「権限を持った」[Glibcのマニュアル](http://www.gnu.org/s/libc/manual/html_node/Getopt-Long- Options.html#Getopt-Long-Options)。 –

+0

ありがとう、それは完全に動作します。私はgetopt_longのドキュメントであまりにも長く見つめすぎていて、 'man getopt'では十分ではありませんでした! –

関連する問題