⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbcreate.c

📁 linux 下用c++ 开发的一个小型数据库系统
💻 C
字号:
#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>#include <unistd.h>#include "catalog.h"DB db;BufMgr *bufMgr;Error error;RelCatalog *relCat;AttrCatalog *attrCat;#define CALL(c)    {Status s;if((s=c)!=OK){error.print(s);exit(1);}}int main(int argc, char *argv[]){  if (argc < 2) {    cerr << "Usage: " << argv[0] << " dbname" << endl;    return 1;  }  // create database subdirectory and chdir there  if (mkdir(argv[1], S_IRUSR | S_IWUSR | S_IXUSR	             | S_IRGRP | S_IWGRP | S_IXGRP) < 0) {    perror("mkdir");    exit(1);  }  if (chdir(argv[1]) < 0) {    perror("chdir");    exit(1);  }  // create buffer manager    bufMgr = new BufMgr(100);    Status status;  // create heapfiles to hold the relcat and attribute catalogs  status = createHeapFile("relcat");  if (status != OK) {    error.print(status);    exit(1);  }  status = createHeapFile("attrcat");  if (status != OK) {    error.print(status);    exit(1);  }  // open relation and attribute catalogs  relCat = new RelCatalog(status);  if (status == OK)    attrCat = new AttrCatalog(status);  if (status != OK) {    error.print(status);    exit(1);  }  // add tuples describing relcat and attrcat to relation catalog  // and attribute catalog  RelDesc rd;  AttrDesc ad;  strcpy(rd.relName, RELCATNAME);  rd.attrCnt = 2;  CALL(relCat->addInfo(rd));  strcpy(ad.relName, RELCATNAME);  strcpy(ad.attrName, "relName");  ad.attrOffset = 0;  ad.attrType = (int)STRING;  ad.attrLen = sizeof rd.relName;  CALL(attrCat->addInfo(ad));  strcpy(ad.attrName, "attrCnt");  ad.attrOffset += sizeof rd.relName;  ad.attrType = (int)INTEGER;  ad.attrLen = sizeof rd.attrCnt;  CALL(attrCat->addInfo(ad));  strcpy(rd.relName, ATTRCATNAME);  rd.attrCnt = 5;  CALL(relCat->addInfo(rd))  strcpy(ad.relName, ATTRCATNAME);  strcpy(ad.attrName, "relName");  ad.attrOffset = 0;  ad.attrType = (int)STRING;  ad.attrLen = sizeof ad.relName;  CALL(attrCat->addInfo(ad));  strcpy(ad.attrName, "attrName");  ad.attrOffset += sizeof ad.relName;  ad.attrType = (int)STRING;  ad.attrLen = sizeof ad.attrName;  CALL(attrCat->addInfo(ad));  strcpy(ad.attrName, "attrOffset");  ad.attrOffset += sizeof ad.attrName;  ad.attrType = (int)INTEGER;  ad.attrLen = sizeof ad.attrOffset;  CALL(attrCat->addInfo(ad));  strcpy(ad.attrName, "attrType");  ad.attrOffset += sizeof ad.attrOffset;  ad.attrType = (int)INTEGER;  ad.attrLen = sizeof ad.attrType;  CALL(attrCat->addInfo(ad));  strcpy(ad.attrName, "attrLen");  ad.attrOffset += sizeof ad.attrType;  ad.attrType = (int)INTEGER;  ad.attrLen = sizeof ad.attrLen;  CALL(attrCat->addInfo(ad));  delete relCat;  delete attrCat;  delete bufMgr;  cout << "Database " << argv[1] << " created" << endl;  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -