Сбросить изменения на диск
Назначение
Изменения, производимые клиентским приложением, не сразу
переносятся в файлы БД, т.к. СУБД ЛИНТЕР выполняет буферизацию
ввода/вывода с целью оптимизации обработки запросов. Команда
SNAP
заставляет ядро СУБД ЛИНТЕР произвести запись накопленных
изменений,
не дожидаясь заполнения буфера вывода.
Эта команда позволяет регулировать загрузку буферов ввода/вывода, снижать их заполнение обновленными страницами и элементами очередей.
Параметры вызова
inter(CBL, NULL, NULL, [CondBuf], NULL);
Входные данные
Входными данными является контрольный блок
CBL.
В нем должны быть заполнены поля:
| Имя поля | Значение | |
|---|---|---|
Command
|
"SNAP"
| |
Node
| Имя ЛИНТЕР-сервера |
Выходные данные
Выходными данными является контрольный блок
CBL.
В нем будут возвращены:
| Имя поля | Значение | |
|---|---|---|
CodErr
| Код завершения запроса к СУБД ЛИНТЕР | |
SysErr
| Код состояния ОС |
Описание
Команду
SNAP
можно подавать в любом месте приложения.
Указание номера открытого канала не требуется (это неканальная команда). Номер канала в контрольном блоке можно не заполнять.
Идентификации пользователя не требуется, эту команду может подать любой пользователь.
Пример формирования команды
#include <string.h>
#include <stdlib.h>
#include "inter.h"
L_LONG LinterSNAP(L_CHAR * Node)
{
TCBL CBL;
memset(&CBL, 0, sizeof(TCBL));
memcpy(CBL.Command, "SNAP", 4);
if (strlen(Node) > MAX_NODE_LEN)
{
return SQLLONGID;
}
memset(CBL.Node, 0, MAX_NODE_LEN);
memcpy(CBL.Node, Node, strlen(Node));
CBL.PrzExe &= ~Q_ASYNC;
inter(&CBL, NULL, NULL, NULL, NULL);
return CBL.CodErr;
}
Пример использования команды
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "inter.h"
#include "exlib.h"
#ifndef WINCE
int main()
#else
int exsnap()
#endif
{
TCBL CBL;
L_CHAR Node[] = " ";
L_LONG Err;
/* ... */
memset(&CBL,0,sizeof(TCBL));
Err = LinterSNAP(Node);
if (Err != NORMAL)
PrintError(&CBL);
printf("SNAP\n");
/* ... */
printf("End Example\n");
return 0;
}