Запуск ядра СУБД ЛИНТЕР
Назначение
Запуск ядра СУБД ЛИНТЕР.
Синтаксис
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");
}