📄 tablecreate.c
字号:
#include<stdlib.h>#include<stdio.h>#include<sys/types.h>#include<fcntl.h>#include<sys/stat.h>#include<unistd.h>#include<string.h>#include"table.h"T_TableDes* table_create( const char *szTableName,T_ColumnInfo* pColumnInfos,unsigned int TotalColumns){ T_TableHeader *pTableHeader; unsigned int nRecSize=0; T_RecField* pRecFields; int nOffset=0; int i,j; long fd; T_TableDes* pTableDes; int fsyncd; if((fd=open(szTableName,O_CREAT|O_RDWR|O_SYNC|O_TRUNC,S_IFREG|S_IRWXU|S_IRWXG|S_IROTH))<0)/*�ļ,�����ʧ� */ { perror("create"); exit(EXIT_FAILURE); } pTableHeader=malloc(sizeof(T_TableHeader)); /* Ϊ�ṹ��ڴ� */ pTableHeader->nColumnCount=TotalColumns; /* ʼ��Ϣ*/ pTableHeader->nValidRecordCount=0; pTableHeader->nColSize=sizeof(T_ColumnInfo); /*��㶨�*/ for(i=0;i<TotalColumns;i++) /*����ijȲд��ṹ*/ { switch(pColumnInfos[i].ColumnType) { case conchars: nRecSize+=MAX_CONSTRINGLEN; break; case shortint: nRecSize+=sizeof(short); break; case longint: nRecSize+=sizeof(long int); break; case floatval: nRecSize+=sizeof(float); break; } } pTableHeader->nRecSize=nRecSize; pTableHeader->nDataOffset=sizeof(T_TableHeader)+(sizeof(T_ColumnInfo)*TotalColumns)+(sizeof(T_RecField)*TotalColumns); //lseek(fd,(long)sizeof(NULL),SEEK_SET); /*�ṹд��*/ lseek(fd,0,SEEK_SET); write(fd,pTableHeader,sizeof(T_TableHeader)); write(fd,pColumnInfos,sizeof(T_ColumnInfo)*TotalColumns);/*���д��*/ pRecFields=malloc(sizeof(T_RecField)*TotalColumns); /*void* pField=new Field[nColumnCount]????*/ for(j=0;j<TotalColumns;j++) /*�ֶ��pColumnInfosķָ�����T_RecField�,ʼT_RecField*/ { pRecFields[j].nFieldStart=nOffset; pRecFields[j].nFieldSize=GetFieldSize(pColumnInfos[j].ColumnType); nOffset+=pRecFields[j].nFieldSize; } write(fd,pRecFields,sizeof(T_RecField)*TotalColumns);/*�ηָ��ϢpRecFieldд��*/ pTableDes=malloc(sizeof(T_TableDes)); /*ʼ��еı��ṹpTableDes*/ strcpy(pTableDes->szTableName,szTableName); pTableDes->fd=fd; /*�벻�?*/ pTableDes->pTableHeader=pTableHeader; pTableDes->pColInfos=pColumnInfos; pTableDes->pRecFields=pRecFields; pTableDes->TableStatus=0; if((fsyncd=fsync(fd))==-1) /*�fdдش��*/ { perror("file synchronize failed"); exit(EXIT_FAILURE); /*free���?*/ } return pTableDes;}unsigned int GetFieldSize(T_ColumnType ColumnType) /*�ֶ�olumnType��ֶ�ݳ�*/{ unsigned int nSize; switch(ColumnType) { case conchars: nSize=MAX_CONSTRINGLEN; break; case shortint: nSize=sizeof(short); break; case longint: nSize=sizeof(long int); break; case floatval: nSize=sizeof(float); break; } return nSize;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -