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)
>{ {