Приложение 9. Пример работы с двумя ядрами СУБД
#include "inter.h" #if defined(VXWORKS) #include "vxstart.h" #endif static void PrintErrorAndCloseChannel(TCBL * pCBL); #if defined(VXWORKS) MainStart(c_select, 1024 * 32, UninitLinterClient) #else int main() #endif { char name[] = "SYSTEM/MANAGER8"; int Count; TCBL Cbl; printf("\n*** Table b must be created in one database ***\n"); memset(&Cbl, 0, sizeof(TCBL)); printf("Open channel to default mbx\n"); Cbl.PrzExe &= ~(M_OPTIMISTIC | M_SHARE | M_EXCLUSIVE); /* Autocommit */ memcpy(Cbl.Command, "OPEN", 4); inter(&Cbl, name, NULL, NULL, NULL); if if (Cbl.CodErr) {PrintErrorAndCloseChannel(&Cbl); return 1; } Cbl.LnBufRow = sizeof(Count); memcpy(Cbl.Command, "SLCT", 4); inter(&Cbl, NULL, "SELECT count(*) from b;", NULL, &Count); If (Cbl.CodErr) { PrintErrorAndCloseChannel(&Cbl);} printf("Close channel\n"); memcpy(Cbl.Command, "CLOS", 4); inter(&Cbl, NULL, NULL, NULL, NULL); setenv("LINTER_MBX", "1254", 1); inter_control(&Cbl, ICR_REREAD_ENV, NULL, 0); memset(&Cbl, 0, sizeof(TCBL)); printf("Open channel to mbx 1254 \n"); Cbl.PrzExe &= ~(M_OPTIMISTIC | M_SHARE | M_EXCLUSIVE); /* Autocommit */ memcpy(Cbl.Command, "OPEN", 4); inter(&Cbl, name, NULL, NULL, NULL); if (Cbl.CodErr) { PrintErrorAndCloseChannel(&Cbl); return 1; } Cbl.LnBufRow = sizeof(Count); memcpy(Cbl.Command, "SLCT", 4); inter(&Cbl, NULL, "SELECT count(*) from b;", NULL, &Count); if (Cbl.CodErr) { PrintErrorAndCloseChannel(&Cbl); } printf("Close channel\n"); memcpy(Cbl.Command, "CLOS", 4); inter(&Cbl, NULL, NULL, NULL, NULL); printf("done\n"); printf("\nEnd of work.\n"); return 0; } void PrintErrorAndCloseChannel(TCBL * pCBL) { printf("\n"); if (strncmp(pCBL- >Node, " ", MAX_NODE_LEN) != 0 && *pCBL- >Node != 0) printf("* Linter server < %.8s >\n", pCBL- >Node); printf("* Channel N %d\n", pCBL- >NumChan); printf("* Command [%.4s]\n", pCBL- >Command); printf("* Linter error: %ld\n", pCBL- >CodErr); if (pCBL- >CodErr >= 2000 && pCBL- >CodErr < 3000) fprintf(stderr, " Line %hd position %hd\n", ((L_WORD *) (&pCBL- >SysErr))[0], ((L_WORD *) (&pCBL- >SysErr))[1]); else if (pCBL- >SysErr) printf("* System error: %ld\n", pCBL- >SysErr); memcpy(pCBL- >Command, "CLOS", 4); /* Close channel */ inter(pCBL, NULL, NULL, NULL, NULL); }