Дать идентификатор пользователя
Назначение
Команда
FUSR
предназначена для получения идентификатора указанного пользователя.
Параметры вызова
inter(CBL, VarBuf, NULL, [CondBuf], RowBuf);
Входные данные
Входными данными являются:
-
контрольный блок
CBL; -
буфер описания параметров
VarBuf.
В контрольном блоке должны быть заполнены поля:
| Имя поля | Значение | |
|---|---|---|
NumChan
| Номер канала | |
Command
|
"FUSR"
| |
LnBufRow
| Длина буфера выборки данных | |
Node
| Имя ЛИНТЕР-сервера |
Буфер описания параметров
VarBuf должен содержать имя интересующего пользователя. В отличие от
употребления имени пользователя при
его идентификации (например, в команде
OPEN), в данной команде оно не проходит синтаксического разбора,
его символы воспринимаются в том виде, в котором заданы, без изменения
регистра. Поэтому в конкретном случае любые двойные кавычки
(если они используются в имени пользователя) представляют самих себя и
не являются элементом синтаксической конструкции.
Например, приведенные ниже имена пользователей (как они представлены в
VarBuf) являются различными именами:
Иванов, ИВАНОВ, "ИВАНОВ", Smit, SMIT, "Smit"
Примечание
Если длина имени пользователя меньше MAX_ID_LEN символов, то имя пользователя должно быть дополнено справа пробелами до MAX_ID_LEN символов.
Выходные данные
Выходными данными являются:
-
контрольный блок
CBL; -
буфер выборки данных
RowBuf.
В контрольном блоке будут возвращены:
| Имя поля | Значение | |
|---|---|---|
CodErr
| Код завершения запроса к СУБД ЛИНТЕР | |
LnBufRow
| Фактическая длина буфера выборки данных | |
SysErr
| Код состояния ОС |
Информация в буфере выборки данных
RowBuf будет представлена в следующем виде:
L_LONG User_Id; /* Идентификатор пользователя */
Описание
По этой команде СУБД сначала просматривает очередь пользователей в
оперативной памяти ядра для поиска указанного имени.
Если нужного пользователя не найдено, поиск продолжается в таблице
пользователей
$$$USR.
Коды завершения
| Код | Описание | |
|---|---|---|
| NORMAL | Нормальное завершение | |
| SMALLBUFKOR | Недостаточный размер буфера выборки данных | |
| EORR | Указанный пользователь не найден |
Пример формирования команды
#include <string.h>
#include <stdlib.h>
#include "inter.h"
L_LONG LinterFUSR(TCBL * pCBL, L_CHAR * User, L_LONG * pUser_ID)
{
memcpy(pCBL->Command, "FUSR", 4);
pCBL->LnBufRow = sizeof(L_LONG);
pCBL->PrzExe &= ~Q_ASYNC;
inter(pCBL, User, NULL, NULL, pUser_ID);
return pCBL->CodErr;
}
Пример использования команды
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "inter.h"
#include "exlib.h"
#ifndef WINCE
int main()
#else
int exfusr()
#endif
{
TCBL CBLconnect;
L_CHAR Name_Pass[] = "SYSTEM/MANAGER8";
L_CHAR Node[] = " ";
L_WORD Priority = 0;
L_LONG PrzExe = M_EXCLUSIVE | Q_ENCODE | M_BINARY;
L_LONG Err;
L_LONG ID;
L_CHAR User[] = "SYSTEM";
memset(&CBLconnect,0,sizeof(TCBL));
Err = LinterOPEN(&CBLconnect, Name_Pass, Node, Priority, PrzExe);
if (Err != NORMAL)
PrintError(&CBLconnect);
printf("Connect to RDBMS Linter\n");
Err = LinterFUSR(&CBLconnect, User, &ID);
if (Err != NORMAL)
PrintError(&CBLconnect);
printf("FUSR:\n");
printf("User=%s,ID=%ld\n", User, ID);
printf("End Example\n");
return 0;
}