как запустить программу c с чтением параметров командной строки в openvms?

Я создал простую программу, пытающуюся распечатать параметры командной строки.

Код ниже, и я создал исполняемый файл (TEST.EXE).

int main(int argc, char *argv[])
{
    int i;
    printf("%s\n",argv[0]);
    for (i = 1;  i < argc;  i++)
       printf("argument %d: %s\n", i, argv[i]);
    exit (EXIT_SUCCESS);
}

Я пытаюсь запустить TEST.EXE и распечатать параметры, но безуспешно.

Результат команды RUN TEST.EXE test1 test2:

%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters

Что я могу сделать, чтобы напечатать «test1» и «test2»?


person Y.C.    schedule 21.02.2016    source источник
comment
Этот простой вопрос делает VMS похожим на динозавра. Неудивительно, что другие ОС взяли верх. У VMS были хорошие возможности файловой системы, но она никогда не предназначалась для интерактивного запуска программ.   -  person chqrlie    schedule 21.02.2016


Ответы (3)


Кроме того, если вам нужно сохранить регистр аргументов, вы должны заключить эти аргументы в кавычки или ввести

$ SET PROCESS/PARSE_STYLE=EXTENDED

один раз в жизни вашего процесса и

$ DEFINE/USER DECC$ARGV_PARSE_STYLE TRUE

перед запуском вашей программы с помощью определенной внешней команды или с помощью автоматических внешних команд (DCL$PATH). В противном случае все аргументы без кавычек преобразуются в символы нижнего регистра.

PS: VMS имеет командный язык, то есть вам нужно ввести команду для запуска программы. По умолчанию имена файлов не являются командами. Определив DCL$PATH, вы измените это поведение по умолчанию.

person user2116290    schedule 21.02.2016

Команда RUN не поддерживает никаких аргументов командной строки. Определите внешнюю команду и используйте ее вместо этого. Из Часто задаваемых вопросов для начинающих Дэвида Матога:

Как запустить программу?

  • Способ 2. Используйте команду RUN:

    $ run program_nameNo command line arguments allowed

  • Способ 3. Определите для него внешнюю команду, а затем запустите ее. В следующем примере где логическое имя эквивалентно расположению программы.

    $ new_command :== $where:program_name $ new_command [command line arguments]

person a3f    schedule 21.02.2016

Определение внешней команды в соответствии с «a3f» — это «правильный» способ сделать это, хотя и несколько утомительный и двухэтапный.

Вы также можете попробовать «трюк» MCR. MCR — сокращение от подпрограммы команд монитора из операционной системы PDPD-11 RSX, которой более 40 лет.

Теперь MCR по умолчанию ищет программу в SYS$SYSTEM, поэтому вам нужно указать текущее местоположение:

$ MCR dev:[dir]TEST this is a test.

Существует также 1-1/2-шаговый подход с использованием DCL$PATH. Это работает в основном так же, как путь Unix и Windows, предоставляя места для поиска сценариев или программ DCL, если введена неизвестная команда.

Например

$ DEFINE DCL$PATH SYS$DISK:[],SYS$LOGIN:,SYS$SYSTEM:

Теперь просто введите: TEST this.

Хайн

person Hein    schedule 21.02.2016