Справочное руководство по MySQL версии 4.1.1-alpha



         

8.4.9.6 Пример простого встраиваемого сервера - часть 2


/* Эта функция должна вызываться после всех других функций mysql */

mysql_server_end(); exit(EXIT_SUCCESS);

}

static void die(MYSQL *db, char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); (void)putc('\n', stderr); if (db) db_disconnect(db); exit(EXIT_FAILURE); }

MYSQL * db_connect(const char *dbname) { MYSQL *db = mysql_init(NULL); if (!db) die(db, "mysql_init failed: no memory");

/* * Обратите внимание: клиент и сервер используют разные имена групп. * Это обязательное условие, поскольку сервер не должен использовать опции * клиента и наоборот. */

mysql_options(db, MYSQL_READ_DEFAULT_GROUP, "test_libmysqld_CLIENT"); if (!mysql_real_connect(db, NULL, NULL, NULL, dbname, 0, NULL, 0)) die(db, "mysql_real_connect failed: %s", mysql_error(db)); return db; }

void db_disconnect(MYSQL *db) { mysql_close(db); }

void db_do_query(MYSQL *db, const char *query) { if (mysql_query(db, query) != 0) goto err; if (mysql_field_count(db) > 0) { MYSQL_RES *res; MYSQL_ROW row, end_row; int num_fields; if (!(res = mysql_store_result(db))) goto err; num_fields = mysql_num_fields(res); while ((row = mysql_fetch_row(res))) { (void)fputs(">> ", stdout); for (end_row = row + num_fields; row < end_row; ++row) (void)printf("%s\t", row ? (char*)*row : "NULL"); (void)fputc('\n', stdout); } (void)fputc('\n', stdout); } else (void)printf("Affected rows: %lld\n", mysql_affected_rows(db)); return; err: die(db, "db_do_query failed: %s [%s]", mysql_error(db), query); }

`GNUmakefile'

# Предполагается, что программное обеспечение MySQL установлено в #/usr/local/mysql

inc := /usr/local/mysql/include/mysql lib := /usr/local/mysql/lib

# Если программное обеспечение MySQL еще не установлено, сделайте такую замену:

#inc := $(HOME)/mysql-4.0/include #lib := $(HOME)/mysql-4.0/libmysqld

CC := gcc CPPFLAGS := -I$(inc) -D_THREAD_SAFE -D_REENTRANT CFLAGS := -g -W -Wall LDFLAGS := -static

# Можно изменить -lmysqld на -lmysqlclient для того, чтобы использовать # обычную клиент-серверную библиотеку

LDLIBS = -L$(lib) -lmysqld -lz -lm -lcrypt ifneq (,$(shell grep FreeBSD /COPYRIGHT 2>/dev/null))

# Для FreeBSD

LDFLAGS += -pthread else

# Предполагается Linux

LDLIBS += -lpthread endif

# Это работает для простых однофайловых тестовых программ

sources := $(wildcard *.c) objects := $(patsubst %c,%o,$(sources)) targets := $(basename $(sources)) all: $(targets) clean: rm -f $(targets) $(objects) *.core




Содержание  Назад  Вперед