




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/semun.h#if defined(_GNU_LIBRARY_) & !defined(_SEM_SEMUN_UNDEFINED) /* union semun is defined by including */#else /* according to X/OPEN we have to define it ourselves */ union semun int val; /* value for SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ unsigned short int *array; /* array for GETALL, SETALL */ struct seminfo *_buf; /* buffer for IPC_INFO */ ;#endif/server.c#include#include#include#include#include#include #include#include#include #include #include #include#include #include #include #include #include#include #include #include semun.hstruct stu_info char stu_num12;char name10;char sex;/*0涓哄僐鐢燂紝1煱擑敺鐢?/char mobile_phone12;struct stu_info student;unsigned int number;struct stu_info stu100;FILE *in;FILE *out;int len;static int sem_id;void inputstu(int fd);void updatestu(int fd);void deletestu(int fd);void displaystu(int fd); void set_semvalue(); void del_semvalue(); void semaphore_p(); void semaphore_v();void reaper(int sig);void stuserver(int client_sockfd);int main() srand(unsigned int)getpid();sem_id = semget(key_t)1234, 1, 0666 | IPC_CREAT); set_semvalue(); int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address; server_sockfd = socket(AF_INET, SOCK_STREAM, 0); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(9734); server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr *)&server_address, server_len); listen(server_sockfd, 5); signal(SIGCHLD,reaper); while(1) printf(server waitingn); client_len = sizeof(client_address); client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_address, &client_len); if(fork() = 0) stuserver(client_sockfd); exit(0); else close(client_sockfd); del_semvalue();void stuserver(int client_sockfd)char ch;while(1)read(client_sockfd,&ch,1);if(ch=q)break;switch(ch)case 1:inputstu(client_sockfd); break;case 2:updatestu(client_sockfd);break;case 3:deletestu(client_sockfd);break;case 4:displaystu(client_sockfd);break;case r:printf(ninit student tablen);if(out=fopen(c.doc,w)=NULL) return;number=0;fwrite(&number,sizeof(unsigned int),1,out);fflush(out);fclose(out);break;default:break;void inputstu(int fd)char ch;len=sizeof(struct stu_info);while(1)memset(&student,0,len);read(fd,&student,len);if(out=fopen(c.doc,r+)=NULL) return;semaphore_p();fread(&number,sizeof(unsigned int),1,out);number+;fseek(out,0L,SEEK_SET);fwrite(&number,sizeof(unsigned int),1,out);fflush(out);fseek(out,0L,SEEK_END);fwrite(&student,len,1,out);fflush(out);fclose(out);semaphore_v();read(fd,&ch,1);if(ch!=Y)break;void updatestu(int fd)len=sizeof(struct stu_info);memset(&student,0,len);read(fd,&student,len);semaphore_p();in=fopen(c.doc,r+);fread(&number,sizeof(unsigned int),1,in);unsigned int j;long kk;for(j=0;jnumber;j+)fread(&stu0,len,1,in);if(strcmp(student.stu_num,stu0.stu_num)=0)kk=len;fseek(in,-kk,SEEK_CUR);fwrite(&student,len,1,in);break;fflush(in);fclose(in);semaphore_v();char buf20;memset(buf,0,20);if(j=number)strcpy(buf,娌亷湁杩欐郒璁斅綍n);else strcpy(buf,熃敼鎴愬姛n);write(fd,buf,20);void deletestu(int fd)char stu_num12;char buf20;semaphore_p();in=fopen(c.doc,r);fread(&number,sizeof(unsigned int),1,in);memset(stu,0,sizeof(stu);len=sizeof(struct stu_info);fread(stu,len,number,in);unsigned int i;char f;while(1)memset(stu_num,0,12);memset(buf,0,20);read(fd,stu_num,12);for(i=0;inumber;i+)if(strcmp(stu_num,stui.stu_num)=0)break;if(i=number) strcpy(buf,娌湁杩欐潯璁板綍n);else number-;for(;i= 0)/* empty */;void set_semvalue() union semun sem_union; sem_union.val = 1; semctl(sem_id, 0, SETVAL, sem_union);void semaphore_v() struct sembuf sem_b; sem_b.sem_num = 0; sem_b.sem_op = 1; sem_b.sem_flg = SEM_UNDO; semop(sem_id, &sem_b, 1);void semaphore_p() struct sembuf sem_b; sem_b.sem_num = 0; sem_b.sem_op = -1; sem_b.sem_flg = SEM_UNDO; semop(sem_id, &sem_b, 1);void del_semvalue() union semun sem_union; semctl(sem_id, 0, IPC_RMID, sem_union);/client.c#include#include#include#include#include#include#include#include #includestruct stu_info char stu_num12;char name10;char sex;/*0涓哄僐鐢燂紝1煱擑敺鐢?/char mobile_phone12;struct stu_info student;unsigned int number;struct stu_info stu100;int len;void inputstu(int fd);void updatestu(int fd);void deletestu(int fd);void displaystu(int fd);void commanddisp()printf(-n); printf(|-鄆敓鍩烘湰熃亷伅绠亹-|n);printf(|-1.鍩烘湰熃亷伅鎻掑叆.-2.鍩烘湰熃亷伅熃騿敼-|n);printf(|-3.鍩烘湰熃亷伅鍒犻櫎.-4.鍩烘湰熃亷伅鏄剧偢-|n);printf(|-r.鍒郮鐺栵巻绗駝竴娆亴娇鐢椂鐢紒锛佹厧鐢曍-q.瑙鍑?-|n);printf(|-璇疯緭鍏綘鐨勯夋嫨锛?-|n);printf(-n);int main(int argc,char *argv)char*host = localhost;int socf;struct sockaddr_in addr;struct hostent*phe;int result;switch (argc) case 1:host = localhost;break;case 2:host = argv1;break;default:return;memset(&addr, 0, sizeof(addr);addr.sin_family=AF_INET;addr.sin_port = htons(9734);if ( phe = gethostbyname(host) )memcpy(&addr.sin_addr, phe-h_addr, phe-h_length);else if ( (addr.sin_addr.s_addr = inet_addr(host) = INADDR_NONE )printf(cant get %s host entryn, host);socf=socket(AF_INET,SOCK_STREAM,0);len =sizeof(addr);result=connect(socf,(struct sockaddr *)&addr,len);if(result = -1)close(socf);perror(connect errorn);return -1;/commanddisp();/char ch;while(1)doch=getchar();while(ch=n);write(socf,&ch,1);if(ch=q)break;switch(ch)case 1:inputstu(socf); break;case 2:updatestu(socf);break;case 3:deletestu(socf);break;case 4:displaystu(socf);break;case r:break;default:break;printf(Press any key to continue);getchar();getchar();system(clear);commanddisp();void inputstu(int fd)printf(n-璇疯緭鍏儏鐢熶俊鎭?-n);char p;char ch;len=sizeof(struct stu_info);while(1)memset(&student,0,sizeof(student);printf(瀛彿:);scanf(%s,student.stu_num);printf(濮撳悕:);scanf(%s,);printf(鎬髿锛?鏄蜚僐锛?鏄蝈敺锛?);dostudent.sex=getchar();while(student.sex=n);printf(鎵嬫枮鍙?);scanf(%s,student.mobile_phone);write(fd,&student,len);printf(鏄惁缁趸緭鍏锛廚n);fflush(stdin);dop=getchar();while(p=n);if(p!=y&p!=Y)ch=N;write(fd,&ch,1);break;ch=Y;write(fd,&ch,1);void updatestu(int fd)printf(n-瀛敓淇伅淇敼-n);printf(璇疯緭鍏儎奡鏀囫鐢熺殑瀛彿锛?);memset(&student,0,sizeof(student);scanf(%s,student.stu_num);printf(濮撳悕:);scanf(%s,);printf(鎬髿锛?鏄蜚僐锛?鏄蝈敺锛?);dostudent.sex=getchar();while(student.sex=n);printf(鎵嬫枮鍙?);scanf(%s,student.mobile_phone);len=sizeof(struct stu_info);write(fd,&student,len);char buf21;memset(buf,0,21);read(fd,buf,20);p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省宣城市郎溪县2024-2025学年高二上学期期末考试化学试题及答案
- 小区农业生产合作合同
- 行政文件归档与资料管理系统
- 工程项目管理计划执行与监控工具
- 高中现代文阅读方法指导与训练教案
- 商业场所监控设备安装合同书
- 时间作息课件
- 时钟认识任意时间课件
- 写劳动最光荣作文(14篇)
- 绿色简约国际礼仪培训
- 法律知识培训课件
- 2024年安康社区工作者考试真题及答案
- 业财融合与价值创造课件
- 长沙市名校小升初分班考试数学试卷(含答案)
- 肺动脉栓塞护理查房
- 学院 军训协议书
- 农村房地产转让合同协议
- 拉链专业工艺讲解
- 快速康复在泌尿外科的应用
- (标准)按摩店转让合同协议书
- 《死亡医学证明(推断)书》培训试题(附答案)
评论
0/150
提交评论