Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс ПЯВУ 2 сем / Лекции 2 сем / Л№35.Аргументы кс / Лекция № 30.Аргументы командной строки..odt
Скачиваний:
12
Добавлен:
17.04.2015
Размер:
58.31 Кб
Скачать

6. Расшифровка командной строки.

Предположим, что вы запускаете программу ARGS.EXE со

следующей командной строкой:

C:> args first_arg "arg with blanks" 3 4 "last but one" stop!

Заметим, что вы можете послать аргумент с пробелами,

заключив его в двойные кавычки, как показано на примере

"argument with blanks" и "last but one" в примере вызова

программы.

В результате работы программы вы получите примерно

следующее:

Значение argc равно 7

В командной строке содержится 7 параметров

argv[0]: c:\turboc\testargs.exe

argv[1]: first_arg

argv[2]: arg with blank

argv[3]: 3

argv[4]: 4

argv[5]: last but one

argv[6]: stop!

Среда содержит следующие строки:

env[0]: COMSPEC=C:\COMMAND.COM

env[1]: PROMPT=$p $g

env[2]: PATH=C:\SPRINT;C:\DOS;C:\BC

Максимальная общая длина командной строки, посылаемая

функции main (включая пробелы и имя самой программы), не может

превышать 128 символов; это ограничения DOS.

7. Запуск и Окончание Процесса программы.

Процессы - примитивные модули для распределения ресурсов системы. Каждый процесс имеет собственное адресное пространство. Процесс выполняет программу; Вы можете иметь многократные процессы, выполняющие ту же самую программу, но каждый процесс имеет собственную копию программы внутри собственного адресного пространства и выполняет ее независимо от других копий.

Система начинает программу C, вызывая функцию main. Вы должны написать функцию, именованную main, иначе Вы не будете способны линковать вашу программу без ошибок.

Если синтаксис для аргументов командной строки вашей программы является достаточно простым, Вы может просто выбирать аргументы из argv вручную. Но если ваша программа берет фиксированное число аргументов, или все аргументы интерпретируются одинаковым образом (как имена файлов, например), Вам лучше использовать getopt, чтобы делать синтаксический анализ.

8. Синтаксические Соглашения Аргументов Программы

POSIX рекомендует эти соглашения для аргументов командной строки. Getopt реализует

эти соглашения.

Аргументы - опции, если они начинаются с разделителя дефиса (" - ").

За разделителем могут следовать много опций в одиночной лексеме, если опции не берут аргументов. Таким образом, " -abc " эквивалентно " -a -b -c ".

Имена опций - одиночные алфавитно-цифровые символы (как для isalnum; [Классификация Символов]).

Некоторые опции требуют аргумента. Например, команда ` -o ' ld требует аргумент - имя выходного файла.

Опция и ее аргумент могут не занимать отдельные лексемы. (Другими словами, пропуск, отделяющий их необязателен.) Таким образом, " -o foo " и " -ofoo " эквивалентны.

Опции обычно предшествуют другим аргументам, не-опциям. команды

Реализация getopt в библиотеке GNU C обычно делает так, как будто все аргументы опции были определены перед всеми аргументами не-опциями для целей синтаксического анализа, даже если пользователь вашей программы смешал опции и аргументы не-опции. Она делает это, переупорядочивая элементы массива argv. Это поведение нестандартно; если Вы хотите подавлять его, определите _POSIX_OPTION_ORDER переменную среды. [Стандартная Среда].

Аргумент " -- " завершает все опции; все остальные аргументы обрабатываются как аргументы-не-опции, даже если они начинаются с дефиса.

Лексема, состоящая из одиночного символа дефиса интерпретируется как обычный аргумент-не-опция. Обычно, она используется, чтобы определить ввод из или вывод в стандартный ввод и вывод.

Опции могут быть обеспечены в любом порядке, или появляться многократно. Интерпретация оставлена до специфической прикладной программы.

GNU добавляет длинные опции к этому соглашению. Длинные опции состоят из " -- " сопровождаемых именем, составленным из алфавитно цифровых символов, и подчеркивания. Имена опций - обычно от одного до трех слов длинной, с дефисами, чтобы отделить слова. Пользователи могут сокращать имена опций, если только сокращения уникальны.

Пример длинной опции " --name=value ". Этот синтаксис дает возможность длинной опции принять аргумент, который является самостоятельно необязательным.

В конечном счете, система GNU будет обеспечивать длинные имена опций в оболочке.