2011-08-15 5 views
4

지금까지 getopt_long을 사용하여 명령 행 C 프로그램의 옵션을 구문 분석했습니다.C의 인수 전후의 명령 행 옵션 처리

옵션이 아닌 인수에 부딪 힐 때 getopt_long 구문 분석을 중지 할 수 있습니까? 그렇지 않다면 C에서 이것을 처리하는 가장 좋은 방법은 무엇입니까?

는 예를 제공하기 위해, 나는 git에 비슷한 방식으로 명령을 처리, 그리고 명령하기 전에 일반적으로 인수를, 그리고 것 그 후 명령 고유의 인수 :

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

예 :

git --bare commit -a 
git -p --bare status -s 

-p--bare은 일반 옵션이며, 모든 명령과 함께 사용할 수 있습니다, -acommit 명령에 고유 한 반면, 및 -s 특정 status 명령으로 이동하십시오.

getopt_long을 사용하면 먼저 모든 옵션을 구문 분석하고 옵션이 아닌 인수를 처리하도록 남겨 둡니다. 내가 비 옵션 (즉, 명령)을 한 번 파싱을 중지하고 나머지 명령을 명령 특정 옵션 파서에 전달하는 것이 이상적입니다.

답변

6

는 GNU 것은, Getopt 설명서는 말한다 :

POSIX는 다음과 같은 동작을 요구한다 : 첫 번째 옵션이 아닌 옵션의 처리를 중지합니다. 이 모드는 환경 변수 POSIXLY_CORRECT를 설정하거나 옵션 인수 문자열을 더하기 기호 ('+')로 시작하여 선택합니다.

+1

+1. 리눅스 프로그래머 매뉴얼 (Linux Programmer 's Manual), 즉 리눅스 맨 페이지에서 어떻게 나타나는지는 재미 있지만 "권한있는"[Glibc 매뉴얼] (http://www.gnu.org/s/libc/manual/html_node/Getopt-Long- Options.html # Getopt-Long-Options). –

+0

고마워, 그 완벽하게 작동합니다. 나는 getopt_long 문서를 너무 오래 꼼짝 않고 바라 보았고'man getopt'에서 충분하지 못했습니다! –