|
#include <stdio.h> #include <stdlib.h> #include <getopt.h> /* --verbose için tanımlanan bayrak. */ static int verbose_flag; int main (argc, argv) int argc; char **argv; { int c; while (1) { static struct option long_options[] = { /* Bu seçenekler bir bayrak tanımlar. */ {"verbose", no_argument, &verbose_flag, 1}, {"brief", no_argument, &verbose_flag, 0}, /* Bu seçenekler bayraksız. Onları indislerine bakıp bulacağız. */ {"add", no_argument, 0, 'a'}, {"append", no_argument, 0, 'b'}, {"delete", required_argument, 0, 'd'}, {"create", required_argument, 0, 'c'}, {"file", required_argument, 0, 'f'}, {0, 0, 0, 0} }; /* getopt_long seçenek indisini burada saklar. */ int option_index = 0; c = getopt_long (argc, argv, "abc:d:f:", long_options, &option_index); /* Seçeneklerin sonu mu, bakalım. */ if (c == -1) break; switch (c) { case 0: /* Bu seçenek bir bayrak tanımlamamışsa, şimdilik birşey yapmayacağız. */ if (long_options[option_index].flag != 0) break; if (optarg) printf ("%s argümanı ile ", optarg); printf ("%s seçeneği", long_options[option_index].name); printf ("\n"); break; case 'a': puts ("-a seçeneği\n"); break; case 'b': puts ("-b seçeneği\n"); break; case 'c': printf ("`%s' değeri ile -c seçeneği\n", optarg); break; case 'd': printf ("`%s' değeri ile -d seçeneği\n", optarg); break; case 'f': printf ("`%s' değeri ile -f seçeneği\n", optarg); break; case '?': /* getopt_long bir hata iletisi basmış oldu. */ break; default: abort (); } } /* --verbose ve --brief seçeneklerine rastlandığında onları raporlamak yerine onların sonucu olan son durumu raporlayalım. */ if (verbose_flag) puts ("ayrıntı bayrağı etkinleştirildi"); /* Kalan komut satırı argümanlarını (seçenek olmayan) basalım. */ if (optind < argc) { printf ("seçenek olmayan ARGV elemanları: "); while (optind < argc) printf ("%s ", argv[optind++]); putchar ('\n'); } exit (0); }
|