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

📄 recorddel.c

📁 linux下
💻 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 + -