|
Программирование >> Программный интерфейс приложений
файл необходимо включить файл заголовков getopt.h. Этот файл заголовка можно скопировать из дистрибуции исходных текстов СУБД MySQL в каталог, где будет разрабатываться клиентская программа. i Функция load def aults о и безопасность щ Вероятно, у вас возникают вопросы, связанные с возможностью просмотра с помощью команды ps списка аргументов произвольного процесса. Тут никакой проблемы не возникает, так как ps отображает первоначальное содержание argv[]. Любой аргумент пароля, который создается функцией load defaults (), содержит ссылку на область, которую он распределяет для себя. Эта область не является частью обычного вектора аргументов, поэтому ps ее не видит Однако пароль, указанный в командной строке, используется командой Щ ps до тех пор, пока он не будет удален. Как это сделать, изложено дальше в fj этом разделе. Программа show param читает установки с помощью load defaults () конфигурационного файла, а затем вызывает функцию getopt long () для синтаксического анализа вектора аргументов. Профамма show param иллю-сфирует операции, происходящие на каждой фазе обработки аргументов, выполняя следующие действия. 1. Устанавливает значения по умолчанию для имени узла, имени пользователя и пароля. 2. Выводит первоначальный парамеф соединения и значения вектора аргументов. 3. Вызывает функцию load defaults () для того, чтобы изменить вектор аргументов в соответствии со значениями, заданными в конфигурационном файле, и распечатьшает результирующий вектор. 4. Вызывает функцию getopt long () для обработки вектора аргументов, а затем распечатывает полученные значения парамефов и оставшихся в векторе аргументов величин. Профамма show param позволяет экспериментировать с различными вариантами параметров соединения (независимо от того, где они расположены - в конфигурационном файле или в командной сфоке) и увидеть полученные значения, которые будут использованы при соединении. Программа show param удобна для получения представления о поведении нашей следующей клиентской профаммы, где мы реально подключим этот профаммный код обработки параметров к функции подключения do connect(). Вот как выглядит профамма show param. с: /* show param.c */ ♦include <stdio.h> ♦ include <stdlib.h> /* нужен для atoiO */ ♦include getopt.h char *groups[] = { client , NULL ) ; struct option long options( ) = { { host , required argument, NOLL, h), { user , required argument, NOLL, и) { password , required argument, NULL, p}, { port , required argument, NULL, P}, { socket , required argument, NULL, S}, {Txist , required argument, NULL, h}, { 0, 0, 0, 0 } mam (mt argc, char *argv[]) { char *host name = NULL; char *user name = NULL; char *password = NULL; unsigned mt port num = 0; char *socket name = NULL; mt i; mt c, option index; my init(); printf ( Первоначальные параметры соединения : \n ); prmtf ( имя узла: %s\n , host name ? host name : (null) ); printf ( имя пользователя: %s\n , user name ? user name : (null) ); prmtf ( пароль: %s\n , password ? password : (null) ); prmtf ( номер порта: %u\n , port num); prmtf ( имя разъема: %s\n , socket name ? socket name : (null) ); printf ( Первоначальный вектор аргументов: \n ); for (1=0; 1 < argc; i++) prmtf ( arg %d: %s\n , i, argv[i]); load defaults ( my , groups, Sargc, sargv); printf ( Измененный вектор аргументов после load defaults() :\п ) ; for (1 =0; 1 < argc; i++) prmtf ( arg %d: %s\n , i, argv[il) ; while ((c = getopt long (argc, argv, h:p: :u:P:S: , long options, Soption index)) 1= EOF) switch (c) { case h : host name = optarg; break; case u : user name = optarg; break; case p : password = optarg; break; case P: port num = (unsigned int) atoi (optarg); brealc; case S: socket name = optarg; break; argc -= optmd; /* перемещение указателя на аргументы, которые еще не обработаны */ argv += optmd; /* функцией getopt long () */ prmtf ( Параметры соединения после функции getopt long () : \п ) ; printf ( имя узла: %s\n , host name liost name : (null) ); prmtf ( имя пользователя: %s\n , user name user name : (null) ); printf ( пароль: %s\n , password ? password : (null) ); printf ( номер порта: %u\n , port num); prmtf { шля разъема: %s\n , socket name socket name : (null) ); printf ( вектор аргументов после getopt long():\n ); for (1=0; 1 < argc; i++) printf ( arg %d: %s\n , i, argv[i]); exit (0); ) Для обработки вектора аргументов sliow argv вызывает в цикле функцию getopt long() Willie ((с = getopt long (argc, argv, tl: p: : u : P: S : , long options, Soption index)) = EOF) /* обработка */ Два первых аргумента, передаваемых getopt long (), - это счетчик аргументов и вектор Третий аргумент содержит перечень распознаваемых опций Опции представлены в форме коротких имен (букв) За буквами могут следовать двоеточия, двойные двоеточия или их может не быть вовсе Это делается для того, чтобы показать, что за опцией должна следовать опция, может следовать опция или опция не должна следовать соответственно Четвертый аргумент longoptions является указателем на массив структуры опций, каждая из которых определяет информацию для опции, которую должна распознавать профамма Ее назначение аналогично Сфоке опций в фетьем аргументе Четвертый элемент каждой Сфуктуры long options [ ] может быть таким. Длинное имя опции. Значение опции. Значение может равняться required argument. Параметры optional argument, или no argmnent показывают, что за опцией будет следовать опция, может следовать опция или будет отсутствовать опция (Назначение его аналогично двоеточию, двойному двоеточию или отсутствию двоеточия в строке третьего аргумента)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |