Программирование в стандарте POSIX


         

Программа разбирает опции вызвавшей ее


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Программа разбирает опции вызвавшей ее командной строки */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include
#include
int main (int argc, char *argv []) {
int c; /* Имя анализируемой опции */
int aflg = 0; /* Признак того, что задана опция a */
int bflg = 0; /* Признак того, что задана опция b */
int errflg = 0; /* Флаг наличия ошибки в командной строке */
int flg = '?'; /* Флаг (a или b), заданный в командной строке */
char *ofile = NULL; /* Указатель на аргумент опции o */
/* Подавим стандартную диагностику */
/* независимо от первого символа */
/* цепочки имен опций */
opterr = 0;
while ((c = getopt (argc, argv, ":abo:")) != -1) {
switch (c) {
case 'a':
aflg++;
flg = c;
if (bflg) {
fprintf (stderr, "Опции a и b несовместимы\n");
errflg++;
}
break;
case 'b':
bflg++;
flg = c;
if (aflg) {
fprintf (stderr, "Опции a и b несовместимы\n");
errflg++;
}
break;
case 'o':
ofile = optarg;
break;
case ':':
fprintf (stderr, "Отсутствует аргумент опции -%c\n", optopt);
errflg++;
break;
case '?':
fprintf (stderr, "Недопустимая опция -%c\n", optopt);
errflg++;
break;
}
}
if (errflg) {
(void) fprintf (stderr, "Использование: %s: [-a | -b] [-o выходной_файл] "
"[аргумент ...]\n", argv [0]);
return (1);
}
printf ("Заданный флаг: %c\n", flg);
printf ("Аргумент опции o: %s\n", ofile);
printf ("Остаток командной строки:");
for (; optind < argc; optind++) {
printf (" %s", argv [optind]);
}
printf ("\n");
return 0;
}

Содержание  Назад  Вперед