25.2.12. C API嵌入式服务器函数介绍

如果希望允许应用程序链接到嵌入式MySQL服务器库,必须使用mysql_server_init()mysql_server_end()函数。请参见25.1节,“libmysqld,嵌入式MySQL服务器库”

但是,要想提供改进的内存管理,即使是对与“-lmysqlclient”而不是与“-lmysqld”链接的程序,也应包含启用和结束库使用的调用。mysql_library_init()mysql_library_end()函数可用于该目的。它们实际上是使其等效于mysql_server_init()mysql_server_end()#define符号,但它们的名称更清楚地指明,无论应用程序使用的是libmysqlclientlibmysqld,开始使用或结束MySQL C API库的使用时,应调用它们。关于更多信息,请参见25.2.2节,“C API函数概述”

25.2.12.1. mysql_server_init()

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

描述

调用任何其他MySQL函数之前,必须在使用嵌入式服务器的程序中调用该函数。它将启动服务器,并初始化服务器使用的任何子系统(mysysInnoDB等)。如果未调用该函数,对mysql_init()的下一次调用将执行mysql_server_init()。如果你正在使用与MySQL一起提供的DBUG软件包,应在调用了my_init()之后调用它。

对于main()的参量,argcargv是类似的参量。argv的第1个元素将被忽略(典型情况下,它包含程序名)。为了方便起见,如果没有针对服务器的命令行参量,argc可以是0mysql_server_init()将复制参量,以便能够在调用之后安全地摧毁argvgroups

如果打算连接到外部服务器而不启动嵌入式服务器,应为argc指定负值。

groups”中以Null终结的字符串列表选择了选项文件中的活动“groups”。请参见4.3.2节,“使用选项文件”。为了方便起见,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_server_init(sizeof(server_args) / sizeof(char *),
                        server_args, server_groups))
    exit(1);
 
  /* Use any MySQL API functions here */
 
  mysql_server_end();
 
  return EXIT_SUCCESS;
}

返回值

如果OK,返回0。如果出现错误,返回1

25.2.12.2. mysql_server_end()

void mysql_server_end(void)

描述

在所有其他MySQL函数后,在程序中必须调用该函数一次。它将关闭嵌入式服务器。

返回值

无。

关注编程学问公众号