Предоставление имени программы с опциями для другой программы

#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 документации.