|
Программирование >> Программный интерфейс приложений
unsigned int port num, char *socket name, unsigned int flags) MYSQL *conn; /* указатель на дескриптор соединения */ conn = mysql init (NULL); /* размещение и инициализация дескриптора соединения */ if (conn == NULL) { print error (NULL, сбой mysql init() (вероятно, не хватает памяти) ); return (NULL); #if defined (MYSQL VERSION ID) && MYSQL VERSION ID >= 32200 /* 3.22 и выше */ if (mysql real connect (conn, host name, user name, password, db name, port num, socket name, flags) == NULL) print error (conn, сбой mysql real connect() ) ; return (NULL); telse Л ДО-3.22 */ if (mysql real connect (conn, host name, user name, password, portnum, socket name, flags) == NULL) print error (conn, сбой mysql real connect() ); return (NULL); if (db name != NULL) /* имитация действия параметра dbname */ { if (mysql select db (conn, dbname) != 0) { print error (conn, сбой mysql select db() ) ; mysql close (conn); return (NULL); #endif return (conn); /* соединение установлено */ Основной исходный файл clients, с аналогичен первоначальному исходному файлу client2. с, но та часть профаммы, которая отвечает за соединение с сервером и отключение от него, теперь заключена в процедурах. Следовательно, этот код принимает вид: /* client3.c */ ♦include <stdio.h> ♦include <mysql.h> ♦include common.h ♦define def host name NULL /* узел, к которому производится подключение (умолчание = localhost) */ ♦define def user name NULL /* имя пользователя (умолчание = ваше имя регистрации в системе) */ ♦define def password NULL /* пароль (умолчание = отсутствует) */ ♦define def port num О /* использовать порт по умолчанию */ #define def socket name NULL /* использовать разъем no умолчанию */ #define def db name NULL /* база данных (умолчание = отсутствует) */ MYSQL *conn; /* указатель на дескриптор соединения */ main (int argc, char *argv[J) { conn = do connect (def host name, def user name, def password, def db name, def port num, def socket name, 0); if (conn == NULL) exit (1); /* Здесь основное тело программы */ do disconnect (conn); exit (0); Client4 - получение параметров соединения во время выполнения Отлично, теперь мы имеем легкомодифицируемый и пуленепробиваемый в смысле устойчивости к ошибкам код. Попробуем изобразить что-нибудь более интеллектуальное, чем использование пустых параметров соединения, чтобы дать пользователю возможность определять эти параметры во время выполнения профаммы. Предьщущий клиент clients имеет один сушественный недостаток - параметры соединения зашиты внутри него. Для того чтобы их изменить, необходимо модифицировать исходный текст и перекомпилировать его. Это не совсем удобно, особенно тогда, когда профамма предназначается для использования другими людьми. Обычным методом определения парамефов соединения во время выполнения является использование опций в командных сфоках. Профаммы из дисфибуции СУБД MySQL принимают парамефы соединения в любой форме из двух, показанных в табл. 6 1. Таблица 6.1. Стандартные опции командной строки СУБД MySQL
Окончание табл 6 1
Для обеспечения совместимости со стандартами СУБД MySQL клиент, создаваемый нами, будет воспринимать данные в аналогичном формате. Это достигается достаточно просто, так как клиентская библиотека включает функцию, которая осуществляет синтаксический анализ вводимых опций. Кроме того, наша программа-клиент получит возможность получать информацию из конфигурационных файлов. Это позволит разместить параметры соединения в файле ~/ .my.cnf (в файле .my.cnf, находящемся в вашем корневом каталоге) и освободит от необходимости указывать их в командной строке. Клиентская библиотека позволяет проверять конфигурационные файлы СУБД MySQL и выбирать любые значения из них. Добавив только несколько строк в текст своей программы, можно ее сделать более интеллектуальной, и для этого совсем не надо изобретать велосипед. Синтаксис конфигурационного файла описан в приложении Д, Программы MySQL . Доступ к содержимому конфигурационного файла Для чтения конфигурационного файла можно воспользоваться функцией load defaults О . Функция load defaults () просматривает конфигурационные файлы, производит синтаксический анализ их содержимого, обновляя вектор аргументов вашей программы (массив argv[]). Таким же образом анализируются опции, заданные в командной строке. Поэтому при синтаксическом анализе опций командной строки мы получаем параметры как часть обычного цикла анализа опций. Опции добавляются в начало массива argv[]. Так что если опции задаются одновременно и в конфигурационном файле, и в командной строке, они попадают в массив argv[] позже, чем любая опция, которая добавляется функцией load defaults(). Вашему вниманию предоставляется небольшая программа showargv, показывающая работу с функцией loaddef aults () и иллюстрирующая, к каким изменениям это приводит в векторе аргументов:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |