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


Пример 2.35


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/* Программа разбирает опции вызвавшей ее командной строки */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#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;

}




Начало  Назад  Вперед



Книжный магазин