23.8.7.40 mysql_library_init()

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

説明

アプリケーションが通常のクライアントプログラムであるか、組み込みサーバーを使用するかに関係なく、この関数は、ほかのすべての MySQL 関数を呼び出す前に、MySQL ライブラリを初期化するために呼び出します。アプリケーションで組み込みサーバーを使用している場合、この呼び出しによってサーバーを起動し、そのサーバーが使用するすべてのサブシステム (mysysInnoDB など) を初期化します。

アプリケーションが MySQL ライブラリの使用を終了したら、mysql_library_end() を呼び出してクリーンアップします。セクション23.8.7.39「mysql_library_end()」を参照してください。

アプリケーションが通常のクライアントとして動作するか、または組み込みサーバーを使用するかどうかの選択は、リンク時に、最終の実行可能ファイルを生成するために、libmysqlclient ライブラリを使用するか、libmysqld ライブラリを使用するかによって異なります。追加情報については、セクション23.8.6「C API 関数の概要」を参照してください。

非マルチスレッド環境では、mysql_init() が必要に応じて自動的に mysql_library_init() を呼び出すため、この呼び出しを省略できます。ただし、mysql_library_init() はマルチスレッド環境でスレッドセーフでないため、mysql_library_init() を呼び出す mysql_init() もスレッドセーフでありません。スレッドを生成する前に mysql_library_init() を呼び出すか、さもなければ mysql_library_init() を呼び出すか、mysql_init() 経由で間接的に呼び出すかに関係なく、相互排他ロックを使用して、呼び出しを保護します。これは、ほかのすべてのクライアントライブラリの呼び出しの前に実行してください。

argc および argv 引数は main() への引数に似ており、組み込みサーバーにオプションを渡すことができます。便宜上、サーバーへのコマンド行引数がない場合、argc0 (ゼロ) にできます。これは、通常の (組み込みでない) クライアントとしてのみ使用することを目的としたアプリケーションの通常のケースであり、呼び出しは一般に 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;
}

引数が渡される (argc0 より大きい) と、argv の最初の要素は無視されます (それには一般にプログラム名が格納されています)。mysql_library_init() は引数のコピーを作成するため、呼び出し後 argv または groups を破棄しても安全です。

組み込みアプリケーションの場合、組み込みサーバーを起動せずに、外部サーバーに接続する場合、argc に負の値を指定する必要があります。

groups 引数は、オプションの読み取り元のオプションファイル内のグループを示す文字列の配列です。セクション4.2.6「オプションファイルの使用」を参照してください。配列の最終エントリを 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;
}
戻り値

成功の場合はゼロ。エラーが発生した場合、ゼロ以外。


User Comments
Sign Up Login You must be logged in to post a comment.