#c #arguments #argv #getopt
Вопрос:
У меня есть программа, в которую я передаю один обязательный аргумент, который является именем другой программы, а перед ним два возможных варианта (допустим, один называется-v, второй-a, их функциональность не важна). Что мне нужно сделать, так это предоставить дополнительные опции для второй программы. Это возможные варианты выполнения программы в терминале:
./программа -тест
./программа -v тест
./программа -v -тест
./тест программы
Но я хотел бы также запустить это:
./программа [любой вариант сверху] обязательный_аргумент [параметры запуска аргументов]
прямой пример:
./программа -v -вторая_программа-g -foo
Есть ли способ каким-то образом отличить два последних параметра как параметры для second_program ? Я пробовал использовать optind, но, к сожалению, распознается только «вторая программа». В настоящее время мой код выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
int main(int argc, char **argv)
{
int vflag = 0;
int aflag = 0;
int c;
while ((c = getopt(argc, argv, "va:")) != -1)
switch(c)
{
case 'v':
vflag = 1;
break;
case 'a':
aflag = 1;
break;
default:
break;
}
if(argv[optind] == NULL) {
printf("Missing mandatory argumentn");
return -1;
}
for (int i = optind; i < argc; i )
printf("Non-option argument %sn", argv[i]);
return 0;
}
Комментарии:
1. может быть, позвонить с:
./program -v -a "second_program -g -foo"
2. К сожалению, я обязан не заключать second_program и его аргументы в кавычки
3.
If the first character of optstring is ' ' or the environment variable POSIXLY_CORRECT is set, then option processing stops as soon as a nonoption argument is encountered
изgetopt
документации.