C заставляет getopt останавливаться при первом не аргументе

Я кодирую программный прокси, который перенаправляет стандартный вывод и т. д. в файлы с использованием: proxy [-i infile] [-o outfile] [-e errfile] cmd [options].

Итак, я хочу заставить getopt остановиться, когда он достигнет cmd, потому что он не должен анализировать параметры для .

Я читал о переменной среды POSIXLY_CORRECT, но я хочу, чтобы она не зависела от этого.

Итак, мой вопрос заключается в том, как достичь именно этого.

Часть моего кода до сих пор

while ((opt = getopt (argc, argv, "i:o:e:")) != -1)
  switch (opt)
  {
    case 'i':
      i = 1;
      strcpy(input, optarg);
      break;
    case 'o':
      o = 1;
      strcpy(output, optarg);
      break;
    case 'e':
      e = 1;
      strcpy(error, optarg);
      break;
    default:
      fprintf(stderr, "usage: proxy [-i infile] [-o outfile] [-e errfile] <cmd> [options]\n");
      return -1;
  }

Это будет входить в регистр по умолчанию все время, когда указана опция для cmd :(


person sch0rschi    schedule 23.11.2014    source источник


Ответы (1)


Вас укусило сомнительное поведение GNU getopt по изменению порядка параметров перед входом. Как вы узнали, одним из решений является установка переменной окружения POSIXLY_CORRECT перед первым вызовом getopt. Вы также можете отключить это поведение, передав + в качестве первого символа строки getopt:

opt = getopt(argc, argv, "+i:o:e:")
person jch    schedule 23.11.2014
comment
Ура, отлично, это маленькое + решает все мои проблемы :) Большое спасибо! - person sch0rschi; 23.11.2014