Запуск ядра СУБД ЛИНТЕР
Назначение
Запуск ядра СУБД ЛИНТЕР.
Синтаксис
L_LONG LinDatabaseControl(t_LINDBCtrl* LINDBCtrl, LIN_DATABASE_RUN, L_LONG Flags [,char *AddComand]);
Входные данные
Входными данными являются:
-
инициализированная управляющая структура LINDBCtrl;
-
идентификатор
LIN_DATABASE_RUN
команды «Запуск ядра СУБД ЛИНТЕР»; -
флаги Flags, модифицирующие поведение команды;
-
необязательный аргумент AddCommand c дополнительными ключами запуска ядра СУБД ЛИНТЕР (задается только одновременно с флагом
LIN_DATABASE_RUN_ARG
). Максимальная длина передаваемой ядру полной команды запуска (т.е. в сумме с дополнительными ключами) не должна превышать 1024 байт.
Допустимые флаги:
Флаг | Значение | |
---|---|---|
LIN_DATABASE_RUN_RDONLY | Запуск ядра в режиме «только чтение» (аналог ключа /RO) | |
LIN_DATABASE_RUN_TCP | Запуск одновременно с ядром сетевого агента (аналог ключа /TCP) | |
LIN_DATABASE_RUN_JDBC | Запуск одновременно с ядром сетевого драйвера сервера для JDBC-сервера с номером порта по умолчанию (аналог ключа /JDBCS) | |
LIN_DATABASE_RUN_ARG | Функция содержит аргумент AddCommand с дополнительным набором ключей запуска ядра |
Выходные данные
Выходными данными является управляющая структура LINDBCtrl.
В управляющей структуре будут возвращены:
Имя поля | Значение | |
---|---|---|
LinterPid | Pid запущенного ядра СУБД ЛИНТЕР | |
RetStatus | Библиотечный код завершения | |
SysStatus | Системный код завершения |
Описание
Функция определяет рабочую БД и запускает на ней ядро СУБД ЛИНТЕР. Алгоритм выбора каталога рабочей БД аналогичен выбору каталога при создании БД (см. пункт Создание БД).
Ядро запускается из каталога, прописанного в поле LinterPath управляющей структуры LINDBCtrl. Если поле LinterPath не инициализировано, по умолчанию ядро ищется в подкаталоге /bin
установочного каталога СУБД ЛИНТЕР.
В качестве дополнительного указания о местоположении рабочей БД можно использовать аргумент AddCommand, задаваемый аналогично полю DbPath в управляющей структуре LINDBCtrl.
После запуска Pid запущенного ядра СУБД сохраняется в управляющей структуре LINDBCtrl.
Если флаги не заданы, по умолчанию ядру СУБД ЛИНТЕР передается пустой список ключей. При необходимости дополнительные ключи запуска ядра можно передать в аргументе AddCommand, при этом должен быть установлен флаг LIN_DATABASE_RUN_ARG, сигнализирующий о наличии ключей в дополнительном аргументе.
Формат символьной строки дополнительных команд:
< ключ >< пробел >< ключ >< пробел >… < ключ >< пробел >
Пример значений аргумента AddCommand:
"/pool=20000 /pidfile=c:\tmp.txt"
Если установлен флаг LIN_DATABASE_RUN_RDONLY
, то должно быть инициализировано поле TmpDir управляющей структуры LINDBCtrl. Его значение будет передано ядру СУБД ЛИНТЕР в значении соответствующего ключа. Если поле не инициализировано, ядро СУБД ЛИНТЕР разместит временные файлы в каталоге, определяемом переменной среды окружения LINTER_TMP
, а если и она не задана, то по умолчанию в каталоге /tmp/linter
.
Если установлен флаг LIN_DATABASE_RUN_TCP
, ядру СУБД ЛИНТЕР передается дополнительный ключ /TCP
, и оно выполняет запуск сетевого агента (драйвера сервера dbs_tcp
) для обеспечения доступа к данной БД удаленным клиентским приложениям.
Если установлен флаг LIN_DATABASE_RUN_JDBC
, ядру СУБД ЛИНТЕР передается дополнительный ключ /JDBCS
, и оно выполняет запуск JDBC-сервера для обеспечения доступа к данной БД удаленным JAVA-приложениям.
Возвращаемые значения
Функция возвращает:
-
0
– нормальное завершение; -
-1
– не запущено ядро СУБД ЛИНТЕР. Если задан флагLIN_DATABASE_RUN_TCP
(LIN_DATABASE_RUN_JDBC
), то данный код возвращается также при невозможности запустить сетевой драйвер сервера (сетевой драйвер JDBC-сервера).
Коды завершения
Код | Описание | |
---|---|---|
E_LINCTRL_PIPE | Неуспешная попытка создания программного канала ввода вывода | |
E_LINCTRL_LINFAILED | Неудачный запуск ядра СУБД ЛИНТЕР. Уточняющий код завершения см. в поле SysStatus управляющей структуры LINDBCtrl | |
E_LINCTRL_RUN | Неудачная попытка запуска исполняемого модуля ядра СУБД ЛИНТЕР | |
E_LINCTRL_NOINIT | Управляющая структура LINDBCtrl не инициализирована | |
E_LINCTRL_NOMEM | Невозможность выделения динамической памяти для полей управляющей структуры LINDBCtrl |
Пример
#include < stdio.h > #include < stdlib.h > #include < string.h > #include "linctrl.h" #include "exlib.h" void PrintError(t_LINDBCtrl *LINDBCtrl); void main() { t_LINDBCtrl LINDBCtrl; CHAR LinterPath[]="/usr/linter"; CHAR AddCommand[]="/pool=20000 /pidfile=c:\tmp.txt " LONGINT Err; Err=LINDBCtrlInit(&LINDBCtrl,LinterPath); if (Err != NORMAL) PrintError(&LINDBCtrl); printf("Initialisation LINDBCtrl\n"); Err= LinDatabaseControl (LINDBCtrl, LIN_DATABASE_RUN, LIN_DATABASE_RUN_TCP | LIN_DATABASE_RUN_ARG, AddCommand); If (Err != NORMAL) PrintError(&LINDBCtrl); printf("Run DBMS Linter\n"); printf("End Example\n"); }