Сбросить изменения на диск
Назначение
Изменения, производимые клиентским приложением, не сразу
переносятся в файлы БД, т.к. СУБД ЛИНТЕР выполняет буферизацию
ввода/вывода с целью оптимизации обработки запросов. Команда
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; }