Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Интернет » Основы программирования в Linux - Мэтью Нейл
<< На главную

Основы программирования в Linux - Мэтью Нейл

Читать онлайн Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 61 62 63 64 65 66 67 68 69 ... 324
Перейти на страницу:

Результат, возвращаемый функцией getopt, — символ следующей опции, хранящийся в массиве argv (если он есть). Вызывайте getopt повторно для поочередного получения каждой опции. Функция ведет себя следующим образом.

□ Если опция принимает значение, на него указывает внешняя переменная optarg.

□ Функция getopt вернет -1, когда не останется опций для обработки. Специальный аргумент -- заставит getopt прекратить перебор опций.

□ Функция getopt вернет ?, если есть нераспознанная опция, которую она сохранит во внешней переменной optopt.

□ Если опции требуется значение (например, в нашем примере опции -f) и не задана никакая величина, getopt обычно возвращает ?. Если поместить двоеточие как первый символ в строке опций, при отсутствии заданной величины функция getopt вернет : вместо ?.

Во внешней переменной optind хранится номер следующего обрабатываемого аргумента. Функция getopt использует ее, чтобы знать, как далеко она продвинулась. Программы редко нуждаются в установке этой переменной. Когда все аргументы с опциями обработаны, переменная optind указывает, где в конце массива argv можно найти оставшиеся аргументы. 

Некоторые версии функции getopt прекратят выполнение при обнаружении первого аргумента не опции, вернув значение -1 и установив переменную optind. Другие, например предлагаемые в ОС Linux, могут обрабатывать опции, где бы они ни встретились в аргументах программы. Учтите, что в данном случае getopt фактически перепишет массив argv так, что все аргументы не опции будут собраны вместе, начиная с элемента массива argv[optind]. В случае версии GNU функции getopt ее поведение определяется переменной окружения POSIXLY_CORRECT. Если переменная установлена, getopt остановится на первом аргументе не опции. Кроме того, некоторые реализации getopt выводят сообщения об ошибке для незнакомых опций. Имейте в виду, что в стандарте POSIX написано о том, что если переменная opterr не равна нулю, функция getopt выведет сообщение об ошибке в stderr.

Итак, выполните упражнение 4.2.

Упражнение 4.2. Функция getopt 

В этом упражнении вы используете функцию getopt; назовите новую программу argopt.c.

#include &lt;stdio.h&gt;

#include &lt;unistd.h&gt;

#include &lt;stdlib.h&gt;

int main(int argc, char *argv[]) {

 int opt;

 while ((opt = getopt(argc, argv, &quot;:if:lr&quot;)) != -1) {

  switch(opt) {

  case 'i':

  case 'l':

  case 'r':

   printf(&quot;option: %cn&quot;, opt);

   break;

  case 'f':

   printf(&quot;filename: %sn&quot;, optarg);

   break;

  case ':':

   printf(&quot;option needs a valuen&quot;);

   break;

  case '?':

   printf(&quot;unknown option: %cn&quot;, optopt);

   break;

  }

 }

 for (; optind &lt; argc; optind++)

  printf(&quot;argument: %sn&quot;, argv[optind]);

 exit(0);

}

Теперь, когда вы выполните программу, то увидите, что все аргументы командной строки обрабатываются автоматически:

$ <b>./argopt -i -lr 'hi there' -f fred.с -q</b>

option: i

option: l

option: r

filename: fred.c

unknown option: q

argument: hi there

Как это работает

Программа многократно вызывает функцию getopt для обработки аргументов-опций до тех пор, пока не останется ни одного, в этот момент getopt вернет -1. Для каждой опции выбирается подходящее действие, включая обработку неизвестных опций и пропущенных значений. Если у вас другая версия getopt, то вы получите вывод, слегка отличающийся от показанного, — особенно сообщения об ошибках — но смысл будет понятен.

Когда все опции обработаны, программа просто выводит оставшиеся аргументы, как и раньше, но начиная с номера, хранящегося в переменной optind.

getopt_long

Многие приложения Linux принимают более информативные аргументы, чем использованные в предыдущем примере односимвольные опции. Библиотека С проекта GNU содержит версию функции getopt, названную getopt_long, которая принимает так называемые длинные аргументы, которые вводятся с помощью двойного дефиса.

Рассмотрим упражнение 4.3.

Упражнение 4.3. Функция getopt_long

Примените функцию getopt_long для создания новой версии примера программы, которая может вызываться с использованием длинных эквивалентов опций, например, следующих:

$ <b>./longopt --initialize --list 'hi there' --file fred.c -q</b>

option: i

option: l

filename: fred.c

./longopt: invalid option --q

1 ... 61 62 63 64 65 66 67 68 69 ... 324
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Основы программирования в Linux - Мэтью Нейл бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга