Дать идентификатор пользователя

Назначение
 

Команда 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;
  }