Spec-Zone .ru
спецификации, руководства, описания, API

22.8.7.40. mysql_library_init()

int mysql_library_init(int argc, char **argv, char **groups)

Описание

Вызовите эту функцию, чтобы инициализировать библиотеку MySQL прежде, чем Вы вызовете любую другую функцию MySQL, является ли Ваше приложение регулярной клиентской программой или использует встроенный сервер. Если приложение использует встроенный сервер, этот вызов запускает сервер и инициализирует любые подсистемы (mysys, InnoDB, и т.д), который использует сервер.

После того, как Ваше приложение делается, пользуясь библиотекой MySQL, вызвать mysql_library_end() очистить. См. Раздел 22.8.7.39,"mysql_library_end()".

Выбор того, работает ли приложение как регулярный клиент или использует встроенный сервер, зависит от того, используете ли Вы libmysqlclient или libmysqld библиотека во время ссылки, чтобы произвести заключительную исполнимую программу. Для дополнительной информации см. Раздел 22.8.6, "Краткий обзор API-функции C".

В немногопоточной среде, звонке mysql_library_init() может быть опущен, потому что mysql_init() вызовет это автоматически по мере необходимости. Однако, mysql_library_init() не ориентировано на многопотоковое исполнение в многопоточной среде, и таким образом ни один не mysql_init(), который вызывает mysql_library_init(). Следует или вызвать mysql_library_init() до порождения любых потоков, или иначе использования взаимное исключение, чтобы защитить вызов, вызываете ли Вы mysql_library_init() или косвенно через mysql_init(). Сделайте это до любого другого клиентского вызова библиотеки.

argc и argv параметры походят на параметры main(), и позвольте передать опций к встроенному серверу. Для удобства, argc может быть 0 (нуль), если нет никаких параметров командной строки для сервера. Это - обычный случай для приложений, предназначенных для использования только в качестве регулярных (невстроенных) клиентов, и вызов обычно пишется как mysql_library_init(0, NULL, NULL).

#include <mysql.h>#include <stdlib.h>int main(void) {  if (mysql_library_init(0, NULL, NULL)) {    fprintf(stderr, "could not initialize MySQL library\n");    exit(1);  }  /* Use any MySQL API functions here */  mysql_library_end();  return EXIT_SUCCESS;}

Когда параметры нужно передать (argc больше чем 0), первый элемент argv игнорируется (это обычно содержит название программы). mysql_library_init() делает копию параметров, таким образом, безопасно уничтожить argv или groups после вызова.

Для встраиваемых приложений, если Вы хотите соединиться с внешним сервером, не запуская встроенный сервер, необходимо определить отрицательную величину для argc.

groups параметром является массив строк, которые указывают на группы в файлах опции, из которых можно считать опции. См. Раздел 4.2.3.3, "Используя Файлы Опции". Сделайте заключительную запись в массиве NULL. Для удобства, если groups сам параметр NULL, [server] и [embedded] группы используются по умолчанию.

#include <mysql.h>#include <stdlib.h>static char *server_args[] = {  "this_program",       /* this string is not used */  "--datadir=.",  "--key_buffer_size=32M"};static char *server_groups[] = {  "embedded",  "server",  "this_program_SERVER",  (char *)NULL};int main(void) {  if (mysql_library_init(sizeof(server_args) / sizeof(char *),                        server_args, server_groups)) {    fprintf(stderr, "could not initialize MySQL library\n");    exit(1);  }  /* Use any MySQL API functions here */  mysql_library_end();  return EXIT_SUCCESS;}

Возвращаемые значения

Нуль в случае успеха. Ненулевой, если ошибка произошла.