2012-09-14 3 views
1
while ((c = getopt(ac, av, "r:u:p:h:P:s:S:t:iRbo:n:")) != EOF) 
     { 
      switch(c) 
       { 
       case 'b': 
        isbsd++; 
        break; 
       case 'R': 
        detectos++; 
        break; 
       case 'r': 
        root = strdup(optarg); 
        break; 
       case 'i': 
        is_scramble = 1; 
        break; 
       case 's': 
        saddr = strtoul(optarg, 0, 0); 
        break; 
       case 't': 
        timeout = strtoul(optarg, 0, 0); 
        break; 
       case 'S': 
        size = strtoul(optarg, 0, 0); 
        break; 
       case 'u': 
        user = strdup(optarg); 
        break; 
       case 'p': 
        pass = strdup(optarg); 
        break; 
       case 'h': 
        host = strdup(optarg); 
        break; 
       case 'P': 
        port = strtoul(optarg, 0, 0); 
        break; 
       case 'o': 
        heapbase = strtoul(optarg, 0, 0); 
        break; 
       case 'n': 
        scnum = strtoul(optarg, 0, 0); 
        break; 
       default: 
        usage(av[0]); 
       } 
     } 

저는 getopt 기능이 새롭고 결코 사용하지 않았습니다. (ac는 argc, av는 argv 임)C getopt, strdup 기능 코드

이 코드는 어떻게 작동합니까? 내가 혼란스러워하는 것은 "r : u ..."이 어떻게 작동하는지입니다.

또한이 코드에서 strdup 및 strtoul은 무엇을합니까?

감사합니다.

+3

"이 코드에서 strdup 및 strtoul은 무엇을합니까?" 이 기능이 무엇인지 알아보기 위해 설명서를 읽으려고 했습니까? –

+1

당신은 [getopt에 대한 문서]를 읽을나요 (http://www.gnu.org/software/libc/manual/html_node/Getopt.html)? 그것은 모두 거기에 설명되어 있습니다. –

답변

0
  1. 는 R은 : 유 : .... : 글자 당신이 명령 줄에서 지정할 수있는 플래그 대표 : 추가 인수가 필요하다는 것을 나타냅니다는
  2. 에서는 StrDup 문자열의 복사본을 만듭니다
  3. strtoul는 콜론 (:)는 옵션 (단일 문자가) 인수가 와야한다는 것을 의미 부호없는 긴
1

로 문자열을 변환합니다. 이 인수는 "optarg"에 저장됩니다.

자세한 내용은 여기에서 보면 : http://www.gnu.org/software/libc/manual/html_node/Getopt.html

strdup()가 버퍼에 복사 대상의 소스 문자 배열을 할당하는 POSIX 편의 기능이다.

strtoul()은 부호없는 정수를 문자열에서 파싱하여 부호없는 long으로 반환하는 함수입니다.

2

정말 StackOverflow에 게시하기 전에 research your question해야합니다.

optstring이 합법적 옵션 문자를 포함하는 문자열입니다 : 즉, optstring 인수를 설명하는 man page for getopt있다 고 말했다. 그러한 문자 다음에 콜론이 오면 옵션에는 인수가 필요하므로 getopt()는 동일한 argv 요소에있는 다음 텍스트 나 다음 argv 요소의 텍스트에 대한 포인터를 optarg에 배치합니다. 두 개의 콜론은 옵션이 선택적 arg를 취한다는 것을 의미합니다. 현재 argv 요소 (예 : "-oarg"와 같은 옵션 이름 자체와 동일한 단어)에 텍스트가 있으면 optarg에 반환되고 그렇지 않으면 optarg가 0으로 설정됩니다. 이것은 GNU 확장입니다. optstring 뒤에 W 다음에 세미콜론이 있으면 -W foo는 긴 옵션 --foo로 처리됩니다. (-w 옵션은 구현 확장에 POSIX.2에 의해 예약되어 있습니다.)이 문제가 2

strdup가 문자열을 복사하는 표준 C 라이브러리 함수의 glibc 전에 라이브러리를 사용할 수 GNU 확장이 아니다 새로 할당 된 버퍼 (따라서 다른 사람의 복사본을 엉망으로 작성하지 않음)이고 strtoul은 문자열을 부호없는 long으로 변환합니다.