Взять управление активным ядром СУБД ЛИНТЕР

Назначение

Взять управление уже запущенным ядром СУБД ЛИНТЕР.

 
Синтаксис
 
L_LONG LinDatabaseControl(t_LINDBCtrl* LINDBCtrl, t_LinDatabaseCommand Command, L_LONG Flags, …);
Входные данные

Входными данными являются:

  1. инициализированная управляющая структура LINDBCtrl;

  2. идентификатор LIN_DATABASE_ATTACH команды «Запуск ядра СУБД ЛИНТЕР».

В управляющей структуре должны быть установлены:

Имя поля Значение
LinterPath Путь к установочному каталогу СУБД ЛИНТЕР
LinterMbx Значение переменной окружения LINTER_MBX
Выходные данные

Выходными данными является управляющая структура LINDBCtrl.

В управляющей структуре будут возвращены:

Имя поля Значение
LinterPid Pid ядра СУБД ЛИНТЕР, взятого под управление
RetStatus Код завершения
SysStatus Системный код завершения
Описание

Функция подготавливает структуру LINDBCtrl для управления ранее запущенным ядром СУБД ЛИНТЕР. Ядро могло быть запущено как с помощью средств библиотеки linctrl, так и любыми иными средствами (командами ОС, клиентскими приложениями и т.п.).

Управляющая структура LINDBCtrl должна быть предварительно инициализирована (поля LinterPath и LinterMbx). Задаваемый при инициализации путь к установочному каталогу СУБД ЛИНТЕР не обязательно должен соответствовать каталогу, из которого запущено ядро СУБД ЛИНТЕР, над которым предполагается взять контроль. Это может быть корректный путь к любому установочному каталогу, однако в данном случае не исключено возникновение конфликта между запущенным ядром и теми программами СУБД ЛИНТЕР, которые, возможно, будут вызываться из этого каталога функциями библиотеки linctrl.

На компьютере могут быть активны несколько ядер СУБД ЛИНТЕР. Под управление будет взято ядро, которое было запущено с переменной окружения LINTER_MBX, соответствующей полю LinterMbx управляющей структуры LINDBCtrl. Если это поле не установлено, по умолчанию используется значение 20561. Значение LinterMbx ядра, над которым берется управление, клиентское приложение должно получить извне (из командной строки запуска, из интерактивного запроса, из файла общих ресурсов и т.п.).

Для получения Pid заданного активного ядра функция пытается прочитать сегмент разделяемой памяти ядра, соответствующего переменной окружения LINTER_MBX. В дальнейшем управление данным ядром (проверка активности, останов и т.п.) будет выполняться по его Pid, сохраненному в управляющей структуре LINDBCtrl.

Возвращаемые значения

Функция возвращает:

  • 0 – нормальное завершение;

  • -1 – взять под управление заданное ядро не удалось.

Коды завершения
Код Описание
E_LINCTRL_SHMGET Неудачный доступ к сегменту разделяемой памяти ядра
E_LINCTRL_NOINIT Управляющая структура 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 LinterMbx[]="20561"
  LONGINT Err;
  Err=LINDBCtrlInit(&LINDBCtrl,LinterPath);
  if (Err != NORMAL)
    PrintError(&LINDBCtrl);
  printf("Initialisation LINDBCtrl\n");
  printf("Введите значение LINTER_MBX\n");
  scanf (LinterMbx);
  Err=LINDBCtrlLinterMbx(&LINDBCtrl,LinterMbx);
  if (Err != NORMAL)
    PrintError(&LINDBCtrl);
  printf("Set LINTER_MBX\n");
  Err=LinDatabaseControl(LINDBCtrl, LIN_DATABASE_ATTACH, 0);
  If (Err != NORMAL)
    PrintError(&LINDBCtrl);
  printf("Attach DBMS Linter DB\n");
  printf("End Example\n");
  }