📄 recorddel.c
字号:
#include<stdlib.h>#include<stdio.h>#include<sys/types.h>#include<fcntl.h>#include<sys/stat.h>#include<string.h>#include<unistd.h> /*sys_ftruncate*/#include"table.h"int record_delete(const char* szTableName,T_Conditions* pConditions) /*ɾ�zTableName���pConditionsƥ�ļ�,�ļ��*/{ return do_record_delete(table_open(szTableName),pConditions);}int do_record_delete(T_TableDes* pTableDes,T_Conditions* pConditions){ int nPos=0; void* pRecord; //int nRetPos; long fd=pTableDes->fd; int ndelcount=0; /*�ļ��*/ struct stat statbuf; pRecord=malloc(pTableDes->pTableHeader->nRecSize); /*��һ��Ŀռ��ڴ�����һ��*/ while((nPos<pTableDes->pTableHeader->nValidRecordCount)&&(record_search(pTableDes,pConditions,&nPos)>=0)) { /*�Ҳ�,ز�ҵļ��*/ if(nPos<pTableDes->pTableHeader->nValidRecordCount) /*�ü���һ����һ�����λ�;*/ { lseek(fd,-(pTableDes->pTableHeader->nRecSize),SEEK_END); /*�ļ��һ��*/ read(fd,pRecord,(pTableDes->pTableHeader->nRecSize)); lseek(fd,(pTableDes->pTableHeader->nDataOffset+ nPos*(pTableDes->pTableHeader->nRecSize)),SEEK_SET);/*�һ��ǵ˼�,ɾ�˼�*/ /*�һ��дü�Ŷ���,Ǹü�*/ write(fd,pRecord,(pTableDes->pTableHeader->nRecSize)); } if(fstat(fd,&statbuf)<0) { free(pRecord); free(pTableDes->pTableHeader); free(pTableDes->pColInfos); free(pTableDes->pRecFields); free(pTableDes); close(fd); perror("fstat"); exit(EXIT_FAILURE); } /*�ļС�������fdijȵ�ϵͳ�sys_fstat*/ ftruncate(fd,(statbuf.st_size-pTableDes->pTableHeader->nRecSize)); /*�ԭȥһ���sys_ftruncate*/ pTableDes->pTableHeader->nValidRecordCount--; /*��1*/ do_table_show(pTableDes); ndelcount++; /*ɾļ���*/ //nPos=nRetPos; /*Ӹü�ż����*/ } lseek(fd,sizeof(NULL),SEEK_SET); //更新表头信息,记录个数变了 write(fd,pTableDes->pTableHeader,sizeof(T_TableHeader)); if(fsync(fd)==-1) /*�дش��*/ { free(pRecord); free(pTableDes->pTableHeader); free(pTableDes->pColInfos); free(pTableDes->pRecFields); free(pTableDes); close(fd); perror("file synchronize failed"); exit(EXIT_FAILURE); } /*ر�ļ*/ return ndelcount;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -