Распределенная База Данных реального времени ССУДА
Функции работы с описаниями таблицы (вариант для 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);
}
Автор ©
Воеводин В.П.
|