//以一个学生信息管理系统为例
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/mman.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#define MALLOC (Mes *)malloc(sizeof(Mes))static int num = 0;typedef struct { char mes_num[10]; char mes_name[16]; int mes_age; char mes_class[20];}Mes;//添加学生信息Mes *mes_add(Mes *p){ printf("学号 姓名 年龄 班级 \n"); scanf("%s%s%d%s",(p+num)->mes_num,(p+num)->mes_name,&((p+num)->mes_age),(p+num)->mes_class); num++; return p;}//查找学生信息void mes_search(Mes *p){ int i; char NUM[10]; printf("请输入要查找的学生的学号:"); scanf("%s",NUM); for(i=0;i<num;i++) { if(strcmp((p+i)->mes_num,NUM)==0) { printf("该学生信息存在!\n"); printf("学号 姓名 年龄 班级 \n"); printf("%s %s %d %s",(p+i)->mes_num,(p+i)->mes_name,(p+i)->mes_age,(p+i)->mes_class); break; } i++; } if(i>=num) { printf("没有学号为:%s的学生的信息!\n",NUM); }}//删除学生信息Mes *mes_del(Mes *p){ int i,j; char NUM[10]; printf("请输入要删除的学生的学号:"); scanf("%s",NUM); for(i=0;i<num;i++) { if(strcmp((p+i)->mes_num,NUM)==0) { for(;i<num;i++) { j=i+1; strcpy((p+i)->mes_num,(p+j)->mes_num); strcpy((p+i)->mes_name,(p+j)->mes_name); (p+i)->mes_age=(p+j)->mes_age; strcpy((p+i)->mes_class,(p+j)->mes_class); } num--; printf("找到并删除该学生的信息!\n"); break; } } return p;}//修改学生信息Mes *mes_change(Mes *p){ char NUM[10]; int i; printf("请输入学生学号:"); scanf("%s",NUM); for(i=0;i<num;i++) { if(strcmp((p+i)->mes_num,NUM)==0) { printf("请输入要修改的信息:\n"); printf("学号 姓名 年龄 班级 \n"); scanf("%s %s %d %s",(p+i)->mes_num,(p+i)->mes_name,&((p+i)->mes_age),(p+i)->mes_class); break; } } if(i<num) { printf("学号为%s的学生的信息已经修改!\n",NUM); }else{ printf("没有学号为%s的学生的信息!\n",NUM); }}//显示学生信息void mes_show(Mes *p){ int i; printf("学号 姓名 年龄 班级 \n"); for(i=0;i<num;i++) { printf("%s %s %d %s\n",(p+i)->mes_num,(p+i)->mes_name,(p+i)->mes_age,(p+i)->mes_class); }}int main(int argc,char *argv[]){ if(argc != 2) { perror("argv[1]1"); exit(1); } int fd; Mes *mes; Mes *p = MALLOC; fd = open(argv[1],O_CREAT|O_RDWR,0777); if(fd == -1) { perror("argv[1]2"); exit(1); } write(fd,p,sizeof(Mes)); lseek(fd,100*sizeof(Mes),SEEK_CUR); write(fd,p,sizeof(Mes)); lseek(fd,0,SEEK_SET); mes=(Mes*)mmap(NULL,sizeof(Mes)*100,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); if(mes==MAP_FAILED){ perror("mmap failed!\n"); } close(fd); fd=open("message.txt",O_CREAT|O_RDWR,0777); if(fd==-1){ perror("message.txt failed to open!\n"); } int i=read(fd,&num,sizeof(int)); if(i<=0){ num=0; } close(fd); char choose; while(1) { printf("1->添加 2->删除 3->修改 4->查找 5->显示 0->退出\n"); choose=getchar(); switch(choose) { case '1':mes=mes_add(mes);break; case '2':mes=mes_del(mes);break; case '3':mes_change(mes);break; case '4':mes_search(mes);break; case '5':mes_show(mes);break; case '0':printf("quit!\n");break; default :printf("没有此选项!\n"); } getchar(); printf("\n"); if(choose == '0'){ break; }else{ continue; } } fd=open("message.txt",O_RDWR); if(fd== -1){ perror("message.txt open error!\n"); exit(1); } write(fd,&num,sizeof(int)); close(fd); munmap(mes,sizeof(Mes)*100); return 0;}#include<stdio.h>#include<std