Читаем Программирование для Linux. Профессиональный подход полностью

 fprintf(stream, "Usage: %s options [ inputfile ... ]\n",

  program_name);

 fprintf(stream,

  " -h --help    Display this usage

                 information.\n"

  " -о --output  filename Write output to file.\n"

  " -v --verbose Print verbose messages.\n");

 exit(exit_code);

}


/* Точка входа в основную программу, параметр ARGC содержит размер

   списка аргументов; параметр ARGV -- это массив указателей

   на аргументы. */

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

 int next_option;


 /* Строка с описанием возможных коротких опций. */

 const char* const short_options = "ho:v";

 /* Массив с описанием возможных длинных опций. */

 const struct option long_options[] = {

  { "help",    0, NULL, 'h' },

  { "output",  1, NULL, 'o' },

  { "verbose", 0, NULL, 'v' },

  { NULL,      0, NULL, 0 } /* Требуется в конце массива. */

 };


 /* Имя файла, в который записываются результаты работы

    программы, или NULL, если вывод направляется в поток

    stdout. */

 const char* output_filename = NULL;

 /* Следует ли выводить развернутые сообщения. */

 int verbose = 0;


 /* Запоминаем имя программы, которое будет включаться

    в сообщения. Оно хранится в элементе argv[0] */

 program_name = argv[0];


 do {

  next_option =

   getopt_long(argc, argv, short_options,

    long_options, NULL);

  switch(next_opt ion) {

  case "h": /* -h или --help */

   /* Пользователь запросил информацию об использовании

      программы, нужно вывести ее в поток stdout и завершить

      работу с выдачей кода 0 (нормальное завершение). */

   print_usage(stdout, 0);

  case 'o': /* -о или --output */

   /* Эта опция принимает аргумент -- имя выходного файла. */

      output_filename = optarg;

   break;

  case 'v': /* -v или --verbose */

   verbose = 1;

   break;

  case '?': /* Пользователь ввел неверную опцию. */

   /* Записываем информацию об использовании программы в поток

      stderr и завершаем работу с выдачей кода 1

      (аварийное завершение). */

   print_usage(stderr, 1);

  case -1: /* Опций больше нет. */

   break;

  default: /* Какой-то непредвиденный результат. */

   abort();

  }

 }

 while (next_option != -1);


 /* Обработка опций завершена, переменная OPTIND указывает на

    первый аргумент, не являющийся опцией. В демонстрационных

    целях отображаем эти аргументы, если задан режим VERBOSE. */

 if (verbose) {

  int i;

  for (i = optind; i < argc; ++i)

   printf("Argument: %s\n", argv[i]);

 }


 /* Далее идет основное тело программы... */


 return 0;

}

Может показаться, что использование функции getopt_long() приводит к написанию громоздкого кода, но, поверьте, самостоятельный синтаксический анализ опций командной строки — гораздо более трудоемкая задача. Функция getopt_long() достаточно универсальна и гибка в работе с опциями, но лучше не заниматься сложными вещами. Старайтесь придерживаться традиционной структуры задания опций.

2.1.4. Стандартный ввод-вывод

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

В книге последовательно рассматриваются все этапы создания встраиваемых систем на микроконтроллерах с применением современных технологий проектирования. Задумав эту книгу, авторы поставили перед собой задачу научить читателя искусству создания реальных устройств управления на однокристальных микроконтроллерах. Издание содержит материал, охватывающий все вопросы проектирования, включает множество заданий для самостоятельной работы, примеры программирования, примеры аппаратных решений и эксперименты по исследованию работы различных подсистем микроконтроллеров. Данная книга является прекрасным учебным пособием для студентов старших курсов технических университетов, которые предполагают связать свою профессиональную деятельность с проектированием и внедрением встраиваемых микропроцессорных систем. Книга также будет полезна разработчикам радиоэлектронной аппаратуры на микроконтроллерах.

Дэниэл Дж. Пак , Стивен Ф. Барретт

Программирование, программы, базы данных / Компьютерное «железо» / Программирование / Книги по IT