Linux программирование в примерах | страница 32



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

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

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

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

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

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

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

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

Многое из этого станет яснее, когда позже в этой главе мы рассмотрим >getopt_long().

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

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

Программа на С получает доступ к своим аргументам командной строки через параметры >argc и >argv. Параметр >argc является целым, указывающим число имеющихся аргументов, включая имя команды. Есть два обычных способа определения >main(), отличающихся способом объявления >argc:

>int main(int argc, char *argv[])  int main(int argc, char **argv)

>{                                 {