2016-11-09 3 views
-1

getopt를 사용하여 프로그래밍 한대로 사용자의 옵션을 처리하는 프로그램을 작성하고 있습니다. 내 질문은, 사용자가 잘못된 옵션을 입력하면 어떻게 오류가 표시됩니까? 또한 변수에 액세스하여 오류 메시지에 표시하려고합니다. 여기에 내 코드의 스냅 샷은 다음과 같습니다 getopt를 사용하여 명령 줄 사용자 인수에 액세스

#include <unistd.h> 
#include <iostream> 

int main(int argc, char **argv) 
{ 
    enum { 
     WHOLE, PREFIX, ANYWHERE, SUFFIX, EMBEDDED 
    } mode; 
    bool reverse_match = false; 
    bool ignore_case = false; 
    bool specify_length = false; 

    int c; 
    while ((c = getopt(argc, argv, "wpsavein:")) != -1) { 
     switch (c) { 
     case '?': 
      std::cerr << "Unrecognised option " << std::endl; 
      std::cerr << "Usage: match [-OPTION]... PATTERN [FILENAME]..." << std::endl; 
      return 2; 
      break; 
     case 'w': // pattern matches whole word 
      mode = WHOLE; 
      break; 
     case 'p': // pattern matches prefix 
      mode = PREFIX; 
      //cout << "test: " << optarg << endl; 
      break; 
     case 'a': // pattern matches anywhere 
      mode = ANYWHERE; 
      break; 
     case 's': // pattern matches suffix 
      mode = SUFFIX; 
      break; 
     case 'v': // reverse sense of match 
      reverse_match = true; 
      break; 
     case 'e': // pattern matches anywhere 
      mode = EMBEDDED; 
      break; 
     case 'i': // ignore case 
      ignore_case = true; 
      break; 
     case 'n': // specifies length of match 
      specify_length = true; 
     } 
    } 
} 

나는 오류를 표시합니다 cerr 스트림을 사용하지만 그것은 또한 사용자 입력을 포함하고 싶습니다. 예를 들어 사용자 입력 -t는 오류가 될 경우 :
invalid option -- 't' 
Unrecognised option -t 
Usage: match [-OPTION]... PATTERN [FILENAME]... 

내가 invalid option -- 't'가 기본이라고 생각하지만, 거기는 내가 수정할 수있는 방법 또는이다

Unrecognised option -t 
Usage: match [-OPTION]... PATTERN [FILENAME]... 

내가 얻고 것은 그것을 포함하지 않습니까? 또한 사용자가 지정한 옵션에 액세스 할 수 있습니까? getopt에에서 설명서의

+2

당신이'getopt'의 매뉴얼 페이지를 읽는 노력했다. 이 모든 질문에 답합니다. –

+0

이 작업을 수행하려면'optopt'를 읽고'opterr'을 설정할 수 있습니다. [맨페이지보기] (https://linux.die.net/man/3/getopt) –

답변

0

조각 : getopt()가 option 문자를 인식하지 못하는 경우

, 그것은, 표준 에러에 오류 메시지를 인쇄는 optopt의 문자를 저장하고 를 반환 '?'. 호출 프로그램은 당신이해야 할 일은 0

에 OPTERR를 설정하여 오류 메시지를 방지 할 수 있습니다

#include <unistd.h> 
#include <iostream> 

int main(int argc, char **argv) { 
    opterr = 0; 
    int c; 
    while ((c = getopt(argc, argv, "wpsavein:")) != -1) { 
    switch (c) { 
     case '?': 
     std::cerr << "Unrecognised option -" << static_cast<char>(optopt) 
        << std::endl; 
     std::cerr << "Usage: match [-OPTION]... PATTERN [FILENAME]..." 
        << std::endl; 
     return 2; 
     break; 
    } 
    } 
} 
+0

정말 고마워요! –

관련 문제