C принуждава getopt да спре при първия не аргумент

Кодирам програмен прокси, който пренасочва stdout и т.н. във файлове, с използване: proxy [-i infile] [-o outfile] [-e errfile] cmd [опции].

Така че искам да принудя 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