📄 s1-1.c
字号:
#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#define MSGKEY 75struct msgform{ long mtype; int action; char user[10],pass[20]; float num1,num2,rs; char op; char mtext[256]; }msg;struct userarr{ char user[10]; char pass[20];}ua[100];int msgqid;int last;main(){ int i,pid,*pint;last=-1;extern cleanup();for(i=0;i<20;i++) signal(i,cleanup);msgqid=msgget(MSGKEY,0777|IPC_CREAT);for(;;){ msgrcv(msgqid,&msg,512,1,0); pint=(int *) msg.mtext; pid=*pint; printf("server: recieve from pid %d \n",pid); printf("name:%s\n",msg.user); printf("pw:%s\n",msg.pass); msg.mtype=pid; *pint=getpid(); if(msg.action==1) { if(serchuser()==1) msg.action=3; else msg.action=-1; } else if(msg.action==2) { if(check()==1) msg.action=-2; else {msg.action=4;add();} } else if(msg.action==10) { f(); } msgsnd(msgqid,&msg,sizeof(struct msgform),0); }}cleanup(){ msgctl(msgqid,IPC_RMID,0); exit(0);}f(){ float a,b,result; char oprator; a=msg.num1; b=msg.num2; oprator=msg.op; printf("express: %f %c %f\n",msg.num1,msg.op,msg.num2); switch(oprator){ case '+':result=a+b;break; case '-':result=a-b;break; case '*':result=a*b;break;case '/':result=a/b;break;} msg.rs=result;}int check(){ int i; for(i=0;i<=last;i++) if(strcmp(ua[i].user,msg.user)==0) return(1); return(0);}int serchuser(){ int i; for(i=0;i<=last;i++) if( (strcmp(ua[i].user,msg.user)==0) && (strcmp(ua[i].pass,msg.pass)==0) ) return(1); return(0);}add(){ strcpy(ua[++last].user,msg.user); strcpy(ua[last].pass,msg.pass);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -