여기 getopt
의 (맨 페이지에서) 예 : 당신이 어떤 선언을 추가해야합니다
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int
main (int argc, char *argv[])
{
int flags, opt;
int nsecs, tfnd;
nsecs = 0;
tfnd = 0;
flags = 0;
while ((opt = getopt (argc, argv, "nt:")) != -1)
{
switch (opt)
{
case 'n':
flags = 1;
break;
case 't':
nsecs = atoi (optarg);
tfnd = 1;
break;
default: /* '?' */
fprintf (stderr, "Usage: %s [-t nsecs] [-n] name\n", argv[0]);
exit (EXIT_FAILURE);
}
}
printf ("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind);
if (optind >= argc)
{
fprintf (stderr, "Expected argument after options\n");
exit (EXIT_FAILURE);
}
printf ("name argument = %s\n", argv[optind]);
/* Other code omitted */
exit (EXIT_SUCCESS);
}
주 및 main()
기능이 작동시킬 수 있습니다.
위의 예 n
은 깃발이며 b
옵션처럼 작동합니다. 위의 t
옵션은 매개 변수를 취하고 사용자의 c
옵션처럼 작동합니다. 당신은 또한 플래그 인 a
옵션을하려는 경우 (즉, 콜론없이에 a
추가)를 getopt
매개 변수 "abf:"
을 만들 것,이 같은 switch
에 연 :
case 'a':
aflag = 1;
break;
처음 가진 aflag
을 0으로 설정하십시오. 결국 aflag
이 설정되지 않은 상태에서 다른 옵션이 전달 된 불법적 인 조건을 점검하게됩니다.
그래서 모두 모두, 그것은 다음과 같을 것이다 :
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int
main (int argc, char *argv[])
{
int flags, opt;
int nsecs, tfnd;
int aflag;
nsecs = 0;
tfnd = 0;
flags = 0;
aflag = 0;
while ((opt = getopt (argc, argv, "ant:")) != -1)
{
switch (opt)
{
case 'a':
aflag = 1;
break;
case 'n':
flags = 1;
break;
case 't':
nsecs = atoi (optarg);
tfnd = 1;
break;
default: /* '?' */
fprintf (stderr, "Usage: %s [-t nsecs] [-n] name\n", argv[0]);
exit (EXIT_FAILURE);
}
}
printf ("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind);
if (optind >= argc)
{
fprintf (stderr, "Expected argument after options\n");
exit (EXIT_FAILURE);
}
if (!aflag && (flags || tfnd))
{
fprintf (stderr, "Must specify a flag to use n or t flag\n");
exit (EXIT_FAILURE);
}
printf ("name argument = %s\n", argv[optind]);
/* Other code omitted */
exit (EXIT_SUCCESS);
}
첫 번째 질문 (-a와 함께 만 유효 -b하게는) getopt는 불가능합니다 - 그것은에 그 상황을 확인하기 쉽다 그러나 주어진 매개 변수를 반복 할 때 자신의. – maja
매개 변수를 반복하는 방법은 무엇입니까? 죄송합니다. 다시 C에서 매우 새로운 것입니다. 어떻게 매개 변수를 반복 할 수 있습니까? – sudobangbang
getopt를 사용할 때 항상 매개 변수를 반복합니다. 단순히'getopt '를 여러 번 호출하고있다. (이 함수는 내부적으로 상태를 저장하므로, 다음에 반환 할 매개 변수를 항상 알고 있습니다). abligh 이미 예제를 게시했습니다. – maja