Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек_1_6_Обработка командной строки.doc
Скачиваний:
7
Добавлен:
21.09.2019
Размер:
73.73 Кб
Скачать

Длинные опции.

Программам GNU рекомендуется использовать длинные опции в форме --help, --verbose и т. д. Такие опции, поскольку они начинаются с '--', не конфликтуют с соглашениями POSIX. Их также легче запомнить (знающим англ. язык), и они предоставляют возможность последовательности среди всех плит GNU. (Например, --help является везде одним и тем же, в отличие от -h для «help», -i для «information» и т. д.) Длинные опции GNU имеют свои собственные соглашения, реализованные в функции getopc_long(3):

  1. У программ, реализующих инструменты POSIX, каждая короткая опция (один символ) должна иметь также свой вариант в виде длинной опции.

  2. Дополнительные специфические для GNU опции не нуждаются в соответствующей короткой опции, но мы рекомендуем это сделать.

  3. Длинную опцию можно сократить до кратчайшей строки, которая остается уникальной. Например, если есть две опции --verbose и --verbatim, самыми короткими сокращениями будут --verbo и --verba.

  4. Аргументы опции отделяются от длинных опций либо разделителем, либо символом = . Например, --sourcefile=/some/file или --sourcefile /some/file.

  5. Опции и аргументы могут быть заинтересованы в операндах командной строки; getopc_long( ) переставляет аргументы таким образом, что сначала обрабатываются все опции, а затем все операнды доступны последовательно. (Такое поведение можно запретить.)

  6. Аргументы опции могут быть необязательными. Для таких опций считается, что аргу­мент присутствует, если он находится в одной строке с опцией. Это работает лишь для коротких опций. Например, если -х такая опция и дана строка ' foo -xRUSSIANS -z' аргументом -х является 'RUSSIANS'. Для 'fоо -х -z' у -х нет аргументов.

  7. Программы могут разрешить длинным опциям начинаться с одной черточки. (Это типично для многих программ X Window.)

GNU Coding Standards уделяет значительное место перечислению всех длинных и коротких опций, используемых программами GNU. Если вы пишете программу, использующую длинные опции, посмотрите, нет ли уже использующихся имен опций, которые имело бы смысл использовать и вам.

Базовая обработка командной строки

Программа на Си получает доступ к своим аргументам командной строки через пара­метры argc и argv. Вы можете дать этим переменным любые другие имена! Хотя лучше этого не делать, т.к. код Вашей программы могут читать другие люди, а имена argc и argv понятны всем. Параметр argc является целым, указывающим число имеющихся аргументов (argument count), включая имя команды. Параметр argv (argument variables) является указателем на массив строк, разделенных пробелом. Каждая строка – это отдельный аргумент. Есть два обычных способа определения main( ), отличающихся способом объявления argc:

int main(int argc, char *argv[ ]) или int main(int argc, char **argv)

Практически между двумя этими объявлениями нет разницы, хотя первое концептуально более понятно: argc является массивом указателей на символы. А второе определение тех­нически более корректно, это то, что показано на рис. 2 изображена эта ситуация:

char ** char *

“cat” ‘\0’

“file1” ‘\0’

“file2” ‘\0’

Рис. 2 Память для argc

По соглашению, argv[0] является именем программы. Последующие элементы argv[1], argv[2] и т.д. являются аргументами командной строки. Последним элементом массива argv является указатель NULL.

Параметр argc указывает, сколько имеется аргументов; поскольку в Си индексы отсчитываются с нуля, выражение 'argv [argc] == NULL' всегда верно. Из-за этого, особенно в коде для UNIX, можно увидеть различные способы проверки окончания списка аргументов, такие, как цикл с проверкой, что счетчик превысил argc, или 'argv[i] == 0', или '*argv != NULL' и т.д. Они все эквивалентны.