| Использование опций |
|
Чтобы использовать опции, не обязательно выполнять самостоятельный синтаксический разбор аргументов программы. В этом разделе будут описаны средства обработки односимвольных (коротких) опций при помощи функции getopt(): Функция getopt () объявлена в заголовочном файле getopt.h следующим образом: int getopt (int ARGC, char ** ARGV, const char * OPTS); argc и argv — это знакомые нам аргументы функции main (). В строке opts перечислены опции (без разделителей и дефисов), используемые программой. Если после имени следует двоеточие, это означает, что опция требует наличия зависимого аргумента. Например, если opts указывает на строку a:be, то программа принимает три опции: -а, -b и -с, причем -а подразумевает наличие зависимого аргумента, а опции -b и -с являются флагами. Обработка опций программы подразумевает неоднократный вызов функции getopt (), которая возвращает код очередной фактически переданной опции. Если пользователь ввел опцию, не указанную в строке opts, to getopt () возвращает код символа "?" (знак вопроса). Когда все имеющиеся опции обработаны, getopt () возвращает -1. Для чтения аргументов опций и независимых аргументов предназначены следующие внешние переменные, также объявленные в файле getopt.h: extern char * optarg; extern int optind; Строка optarg содержит зависимый аргумент обрабатываемой опции, а в переменной optind хранится индекс первого свободного аргумента в массиве argv. При этом следует учитывать, что getopt () перемещает все свободные аргументы в конец argv. Таким образом, они оказываются в диапазоне между optind и argc-i. Если optind больше или равно argc, то это означает, что свободные аргументы отсутствуют. Рассмотрим пример программы, которая выводит каждый переданный ей свободный аргумент в отдельной строке. Опция -о будет перенаправлять вывод в файл, имя которого указывается в зависимом аргументе. А флаг -h будет выводить краткую справку по работе с программой. Программа getoptdemo.c #include <stdio.h> Рассмотрим все по порядку. Сначала объявляется файловый указатель outfile, который инициализируется значением stdout. Эта запись говорит о том, что по умолчанию (если не указана опция -о) вывод будет осуществляться в стандартный вывод. Указатель filename несет двойную нагрузку: если указана опция -о, в него будет занесено имя файла; если же в указателе filename останется значение null, это будет означать, что опция -о не передавалась. Строка heip_str содержит краткую справку по работе с программой. Если указать опцию -ь, то эта справка будет выводиться в стандартный вывод (stdout). В случае неправильного набора опций или аргументов, справочная информация будет выводиться в стандартный поток ошибок (stderr). Затем следует цикл обработки опций. Функция getopto вызывается до тех пор, пока не возвратит значение -1, сигнализирующее о том, что все опции обработаны. Опция -h подразумевает вызов справки и завершение программы, ПОЭТОМУ ВМеСТО ИНСТРУКЦИИ break СТОИТ return. Далее обрабатывается опция -о, зависимый аргумент которой (optarg) заносится в filename. Следующий блок выводит в поток ошибок (stderr) справочную информацию и завершает программу, если пользователь ввел неверную опцию. Наконец, если getopto возвратила что-то еще, то выводится сообщение о неизвестной ошибке, и программа завершается. После выхода из цикла проверяется наличие свободных аргументов. Если таковые отсутствуют, то программа завершается, выводя сообщение об ошибке и справочную информацию в stderr. Затем проверяется, пожелал ли пользователь перенаправить вывод в файл. Если опция -о была указана, то в outf ile заносится указатель на открытый файл. В противном случае вывод будет производиться в stdout (стандартный вывод).
Related Articles
Set as favorite
Bookmark
Email This
Hits: 238 Комментарии (0)RSS feed CommentsНаписать комментарий |