- /* getopt.c */
- #include <stdio.hgt;
- #include <stdlib.hgt;
- #include <unistd.hgt;
-
- void print_help(void);
-
- int main(int argc, char **argv)
- {
- if(argc < 2)
- print_help();
-
- int i, opt;
- int help_flag = 0;
- int flags[3] = {0};
- char *flag[] = {
- "l", "m", "n"};
-
- while((opt = getopt(argc, argv, "lnmha:")) != EOF) {
- switch(opt) {
- case 'l':
- flags[0] = 1;
- break;
- case 'm':
- flags[1] = 1;
- break;
- case 'n':
- flags[2] = 1;
- break;
- case 'h':
- help_flag = 1;
- break;
- case '?':
- help_flag = 1;
- break;
- default:
- help_flag = 1;
- break;
- }
- }
-
- if(help_flag)
- print_help();
-
- else
- for(i = 0; i < 3; i++)
- if(flags[i])
- printf("%sが指定されました.\n", flag[i]);
-
- return 0;
- }
-
- void print_help(void) {
- printf("Usage: ./getopt [OPTION]\n");
- printf("\t -h : ヘルプを表示\n");
- printf("\t -l : テスト\n");
- printf("\t -n : テスト\n");
- printf("\t -m : テスト\n");
- exit(EXIT_SUCCESS);
- }
/* getopt.c */
#include <stdio.hgt;
#include <stdlib.hgt;
#include <unistd.hgt;
void print_help(void);
int main(int argc, char **argv)
{
if(argc < 2)
print_help();
int i, opt;
int help_flag = 0;
int flags[3] = {0};
char *flag[] = {
"l", "m", "n"};
while((opt = getopt(argc, argv, "lnmha:")) != EOF) {
switch(opt) {
case 'l':
flags[0] = 1;
break;
case 'm':
flags[1] = 1;
break;
case 'n':
flags[2] = 1;
break;
case 'h':
help_flag = 1;
break;
case '?':
help_flag = 1;
break;
default:
help_flag = 1;
break;
}
}
if(help_flag)
print_help();
else
for(i = 0; i < 3; i++)
if(flags[i])
printf("%sが指定されました.\n", flag[i]);
return 0;
}
void print_help(void) {
printf("Usage: ./getopt [OPTION]\n");
printf("\t -h : ヘルプを表示\n");
printf("\t -l : テスト\n");
printf("\t -n : テスト\n");
printf("\t -m : テスト\n");
exit(EXIT_SUCCESS);
}
- while((opt = getopt(argc, argv, "lmnha:")) != EOF) {
- switch(opt) {
- case 'n':
- flags[0] = 1;
- break;
- ...
- }
- }
while((opt = getopt(argc, argv, "lmnha:")) != EOF) {
switch(opt) {
case 'n':
flags[0] = 1;
break;
...
}
}
"getopt"の第3引数をオプションの文字列とします.
指定されたオプションが第3引数に存在すれば, "(int)opt"に文字(ASCII Code)が格納され"switch"文が実行されます.
整数の配列の中に"0", "1"しか入らない用にしているのは"if"文に条件式を入れなくて済むためです.
実行例
$ ./getopt -nml
lが指定されました.
mが指定されました.
nが指定されました.
$ ./getopt -h
Usage: ./getopt [OPTION]
-h : ヘルプを表示
-l : テスト
-m : テスト
-n : テスト