Основы программирования в Linux - Страница 64
$ sort -r файлОпции командной строки используются очень широко, и согласованное их применение будет реальной помощью тем, кто станет использовать вашу программу. В прошлом у каждой утилиты был свой подход к формированию опций командной строки, что приводило к некоторой путанице. Например, взгляните на то, каким способом приведенные далее команды принимают параметры:
$ tar cvfB /tmp/file.tar 1024$ dd if=/dev/fd0 of=/trap/file.dd bs=18k$ ps ax$ gcc --help$ ls -lstr$ ls -l -s -t -rМы рекомендуем в ваших приложениях все переключатели командной строки начинать с дефиса и делать их односимвольными, состоящими из одной буквы или цифры. При необходимости опции, не содержащие последующих аргументов, могут группироваться вместе после общего дефиса. Таким образом, два только что приведенных примера с командой
lsddif=/dev/fd0tar-h--helpЕще один недостаток некоторых программ — создание опции
+x-хset -о xtraceset +о xtraceВы, вероятно, можете сказать, что запомнить порядок и назначение всех этих программных опций достаточно трудно без необходимости освоения вызывающих идиосинкразию форматов. Часто единственный выход — применение опции
-hmangetoptДалее приведена программа args.c, проверяющая собственные аргументы.
#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]) { int arg; for (arg = 0; arg < argc; arg++) { if (argv[arg][0] == '-')printf("option: %sn", argv[arg]+1); else printf("argument %d: %sn", arg, argv[arg]); } exit(0);}Когда вы выполните эту программу, она просто выведет свои аргументы и определит опции. Суть в том, что программа принимает строковый аргумент и необязательный аргумент с именем файла, вводимый опцией
-f$ ./args -i -lr 'hi there' -f fred.cargument 0: ./argsoption: ioption: lrargument 3: hi there option: fargument 5: fred.сКак это работает
Программа просто использует аргумент-счетчик
argcВ данном примере, если мы предполагаем, что доступны опции
-l-r-lr-l-rВ стандарте X/Open (который можно найти по адресу http://opengroup.org/) определено стандартное применение опций командной строки (Utility Syntax Guidelines, руководство по синтаксису утилит) и стандартный программный интерфейс для представления переключателей командной строки в программах на языке С: функция
getoptgetopt
Для того чтобы вам легче было следовать правилам, приведенным в этих руководствах, ОС Linux предлагает очень простое в применении средство
getopt#include <unistd.h>int getopt(int argc, char *const argv[], const char *optstring);extern char *optarg;extern int optind, opterr, optopt;Функция
getoptargcargvmaingetoptoptstringgetoptНапример, для обработки предыдущего примера можно было бы применить следующий вызов:
getopt(argc, argv, "if:lr");В нем учтены простые опции
-i-l-r-f