Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
$ <b>sort -r <i>файл</i></b>Опции командной строки используются очень широко, и согласованное их применение будет реальной помощью тем, кто станет использовать вашу программу. В прошлом у каждой утилиты был свой подход к формированию опций командной строки, что приводило к некоторой путанице. Например, взгляните на то, каким способом приведенные далее команды принимают параметры:
$ <b>tar cvfB /tmp/file.tar 1024</b>$ <b>dd if=/dev/fd0 of=/trap/file.dd bs=18k</b>$ <b>ps ax</b>$ <b>gcc --help</b>$ <b>ls -lstr</b>$ <b>ls -l -s -t -r</b>Мы рекомендуем в ваших приложениях все переключатели командной строки начинать с дефиса и делать их односимвольными, состоящими из одной буквы или цифры. При необходимости опции, не содержащие последующих аргументов, могут группироваться вместе после общего дефиса. Таким образом, два только что приведенных примера с командой
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$ <b>./args -i -lr 'hi there' -f fred.c</b>argument 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<b>#include <unistd.h></b><b>int getopt(int argc, char *const argv[], const char *optstring);</b><b>extern char *optarg;</b><b>extern int optind, opterr, optopt;</b>Функция
getoptargcargvmaingetoptoptstringgetoptНапример, для обработки предыдущего примера можно было бы применить следующий вызов:
getopt(argc, argv, "if:lr");В нем учтены простые опции
-i-l-r-f
