27.7.6.41 mysql_library_init()

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

Description

在调用任何其他 MySQL 函数之前,无论您的应用程序是常规 Client 端程序还是使用嵌入式服务器,都请调用此函数以初始化 MySQLClient 端库。如果应用程序使用嵌入式服务器,则此调用将启动服务器并初始化服务器使用的所有子系统(mysysInnoDB等)。

Note

为了避免在使用库完成应用程序后发生内存泄漏(例如,在关闭与服务器的连接之后),请确保显式调用mysql_library_end()。这样可以执行内存 Management 以清理和释放库使用的资源。参见第 27.7.6.40 节“ mysql_library_end()”

应用程序是作为常规 Client 端运行还是使用嵌入式服务器的选择取决于您在链接时使用libmysqlclient还是libmysqld库来生成最终的可执行文件。有关更多信息,请参见第 27.7.5 节“ C API 函数概述”

在非多线程环境中,可以省略对mysql_library_init()的调用,因为mysql_init()将根据需要自动调用它。但是,mysql_library_init()在多线程环境中不是线程安全的,因此mysql_init()也不是,它调用mysql_library_init()。无论是调用mysql_library_init()还是间接通过mysql_init(),都必须在生成任何线程之前调用mysql_library_init(),或者使用 Mutex 来保护该调用。在进行任何其他 Client 端库调用之前,请执行此操作。

argcargv参数类似于main()的参数,并允许将选项传递给嵌入式服务器。为了方便起见,如果没有服务器的命令行参数,则argc可以是0(零)。对于仅用作常规(非嵌入式)Client 端的应用程序,这是常见情况,并且该调用通常写为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()复制参数,因此可以安全地在调用后销毁argvgroups

对于嵌入式应用程序,如果要连接到外部服务器而不启动嵌入式服务器,则必须为argc指定一个负值。

groups参数是一个字符串数组,用于指示要从中读取选项的选项文件中的组。参见第 4.2.2.2 节“使用选项文件”。在数组NULL中进行最后的 Importing。为了方便起见,如果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;
}
Return Values

零成功。如果发生错误,则为非零值。