ГНЦ ИФВЭ
ОУ У-70
Система Управления комплекса У-70  

Распределенная База Данных реального времени ССУДА

Функции работы с описаниями таблицы (вариант для UNIX)

Пример для функции atrdbl

Программа вывода всех описаний таблицы КОТ из БД номер 2 на экран может выглядеть следующим образом:

static char buf[600];
static short i,j,l,k;
static char r_kot[]={"KOT"},user_name[]={"i-am-owner"};

struct tab_opis {
                  unsigned short n_tup;
                  unsigned short n_attr;
                  unsigned short tup_len;
                  unsigned short n_plan;
                   unsigned char r_type;
                   unsigned char stat;
                } r_opis;
struct attr_opis {
                  unsigned char at_len;
                  unsigned char at_type;
                  unsigned short at_offset;
                 } *a_opis;

main()
  {
   if(i=inidbl(2)) pr_err(i,"DB2");
   if((k=ropdbl(r_kot,user_name))<0) pr_err(k,"ROPDBL");
   if(i=rlpdbl(&r_opis,k) pr_err(i,"RLPDBL");

/*  OUTPUT TABLE DESCRIPTION  */
   printf("n_tup=%d  n_attr=%d  n_plan=%d  tup_len=%d  r_type=%x
      stat=%x\n",r_opis.n_tup,r_opis.n_attr,r_opis.n_plan,
      r_opis.tup_len,r_opis.r_type&255,r_opis.stat&255);

/*  OUTPUT TUPLE NAMES  */
   for(j=1;j<=r_opis.n_tup;j++)
     {
      if((i=tupdbl(buf,sizeof(buf),j,k))<0) pr_err(i,"TUPDBL");
      printf(" %s\n",buf);
     }

/*  OUTPUT ATTRIBUTES INFORMATION  */
   (char*)a_opis=buf;
   for(j=1;j<=r_opis.n_attr;j++)
     {
      if((i=atrdbl(buf,sizeof(buf),j,k))<0) pr_err(i,"ATRDBL");
      printf("at_len=%d at_type=%d at_offset=%x %s\n",
        a_opis.at_len,a_opis.at_type,a_opis.at_offset,

          buf+sizeof(struct attr_opis));
     }
   rcldbl(k);
  }
pr_err(i,s)
 int i;
 char *s;
  {
   printf("%s --> %x\n",s,i);
   exit(0);
  }

Автор © Воеводин В.П.