Программирование >>  Программный интерфейс приложений 

1 ... 87 88 89 [ 90 ] 91 92 93 ... 264


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

Параметр

Краткая форма

Длинная форма

Имя узла

- h имя узпа

- - Ь05\=имя узла

Имя пользователя

- U имя пользователя

- - и5ег=имя пользователя



Окончание табл 6 1

Параметр

Краткая форма

Длинная форма

Пароль

- р или -рваш пароль

- - password или

- - password=вaш пapoль

Номер порта

-Р номер порта

- - рой=номер порта

Имя разъема

-S имя разъема

--50ске\=имя разъема

Для обеспечения совместимости со стандартами СУБД MySQL клиент, создаваемый нами, будет воспринимать данные в аналогичном формате. Это достигается достаточно просто, так как клиентская библиотека включает функцию, которая осуществляет синтаксический анализ вводимых опций.

Кроме того, наша программа-клиент получит возможность получать информацию из конфигурационных файлов. Это позволит разместить параметры соединения в файле ~/ .my.cnf (в файле .my.cnf, находящемся в вашем корневом каталоге) и освободит от необходимости указывать их в командной строке. Клиентская библиотека позволяет проверять конфигурационные файлы СУБД MySQL и выбирать любые значения из них. Добавив только несколько строк в текст своей программы, можно ее сделать более интеллектуальной, и для этого совсем не надо изобретать велосипед. Синтаксис конфигурационного файла описан в приложении Д, Программы MySQL .

Доступ к содержимому конфигурационного файла

Для чтения конфигурационного файла можно воспользоваться функцией load defaults О . Функция load defaults () просматривает конфигурационные файлы, производит синтаксический анализ их содержимого, обновляя вектор аргументов вашей программы (массив argv[]). Таким же образом анализируются опции, заданные в командной строке. Поэтому при синтаксическом анализе опций командной строки мы получаем параметры как часть обычного цикла анализа опций. Опции добавляются в начало массива argv[]. Так что если опции задаются одновременно и в конфигурационном файле, и в командной строке, они попадают в массив argv[] позже, чем любая опция, которая добавляется функцией load defaults().

Вашему вниманию предоставляется небольшая программа showargv, показывающая работу с функцией loaddef aults () и иллюстрирующая, к каким изменениям это приводит в векторе аргументов:



1 ... 87 88 89 [ 90 ] 91 92 93 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика