5.4.41 mysql_library_init()
int
mysql_library_init(int argc,
char **argv,
char **groups)
Описание
Вызовите эту функцию для инициализации библиотеки MySQL перед вызовом любой другой функции MySQL, будь то обычная клиентская программа или приложение, использующее встроенный сервер. Если приложение использует встроенный сервер, этот вызов запускает сервер и инициализирует все подсистемы (mysys, InnoDB и так далее), которые использует сервер.
Чтобы избежать утечек памяти после завершения использования библиотеки приложением (например, после закрытия подключения к серверу), обязательно вызовите mysql_library_end() явно. Это позволяет управлять памятью, чтобы очистить и освободить ресурсы, используемые библиотекой. См. Раздел 5.4.40, «mysql_library_end()».
Выбор того, работает ли приложение как обычный клиент или использует встроенный сервер, зависит от того, используете ли вы библиотеку libmysqlclient или libmysqld при линковке для создания конечного исполняемого файла. Дополнительную информацию см. в Главе 4, Ссылка на справочник функций 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 client 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 — это массив строк, которые указывают группы в файлах параметров, из которых следует читать параметры. См. . Последний элемент в массиве должен быть 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 client library\n");
exit(1);
}
/* Use any MySQL API functions here */
mysql_library_end();
return EXIT_SUCCESS;
}
Значения возврата
Ноль в случае успеха. Неноль, если произошла ошибка.
© 2025 Oracle
Licensed under the GPLv2 License.