涉及知识点:
mmap函数的映射;
mmap映射区域的增删查改
mmap映射结构体块儿
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <unistd.h>
#include <fcntl.h>
#include <error.h>
typedef struct{
char name[11];
int num;
int num1;
}people;
int main (int argc,char **argv)
{
if(argc<2)
{
printf("请输入一个数据库名\n");
break;
}
int fd,i=0,number;
people * mapped;
people *fp;
fp=(people *)malloc(sizeof(people));
strcpy(fp->name,"name");
fp->num=1;
fp->num1=1;
fd=open(argv[1],O_RDWR|O_CREAT, 0666);
if(fd<0)
{
printf("open argv[1] error\n");
exit(0);
}
for(number=0;number<10;number++)
write(fd,fp,sizeof(people));
close(fd);
fd=open(argv[1],O_RDWR);
if(fd<0)
printf("打开失败\n");
if((mapped=(people *)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0))==(people *)-1)
{
printf("mmap error\n");
exit(0);
}
close(fd);
while(1)
{
printf("1.添加 2.删除 3.查找\n");
printf("4.更改 5.显示 6.退出\n");
scanf("%d",&number);
if(number==1)
{
printf("输入姓名学号\n");
scanf("%s %d",(mapped+i)->name,&(mapped+i)->num);
(mapped+i)->num1=1;
i++;
}
else if(number==2)
{
char NAME[11];
int j;
printf("请输入姓名\n");
scanf("%s",NAME);
for(j=0;j<i;j++)
{
if((*(mapped+j)).num1==1)
if(strcmp(NAME,(*(mapped+j)).name)==0)
{
(*(mapped+j)).num1=0;
i--;
break;
}
}
if(i==j)
printf("删除失败\n");
}
else if(number==3)
{
char NAME[11];
int j;
printf("请输入名字\n");
scanf("%s",NAME);
for(j=0;j<i;j++)
{
if((*(mapped+j)).num1==1)
{
if(strcmp(NAME,(*(mapped+j)).name)==0)
{
printf("姓名 学号\n");
printf("%s %d",(*(mapped+j)).name,(*(mapped+j)).num);
break;
}
}
}
if(i==j)
{
printf("无此人\n");
}
}
else if(number==4)
{
char NAME[11];
int j;
printf("请输入名字\n");
scanf("%s",NAME);
for(j=0;j<i;j++)
{
if((*(mapped+j)).num1==1)
{
if(strcmp(NAME,(*(mapped+j)).name)==0)
{
printf("请输入姓名学号\n");
scanf("%s%d",(*(mapped+j)).name,&(*(mapped+j)).num);
break;
}
}
}
if(i==j)
{
printf("无此人\n");
}
}
else if(number==5)
{
int j;
for(j=0;j<i;j++)
{
if(j==0) printf("学生姓名 学号\n");
printf("%s %d\n",(*(mapped+j)).name,(*(mapped+j)).num);
}
}
else if (number==6)
{
break;
}
else
printf("输入有错\n");
}
if((munmap((people *)mapped,10*sizeof(people)))==-1)
printf("munmap error \n");
return 0;
}