首页 > 系统服务 > 详细

os实验例子源代码(linux)

时间:2019-12-04 10:18:14      阅读:57      评论:0      收藏:0      [点我收藏+]

(注)源代码还要再修改才能运行

头文件

#define MSGKEY 1183

struct msgform {
    long mtype;
    int source_pid; 
    double a,b;
    char opcode;
    double result;
    char result_msg[128];
}msg;
int msgsize=sizeof(struct msgform)-sizeof(long);
int msgqid;

server.c


#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include <msg_mycs.h>

main()
{
    int i;
    
    extern cleanup();
    for(i=0;i<20;i++)
     signal(i,cleanup);

    msgqid = msgget(MSGKEY,0777|IPC_CREAT);

    for(;msg.opcode!='q';)
    {
     printf("server pid= %d is ready (msgqid=%d)... \n",getpid(),msgqid);

     msgrcv(msgqid,&msg,msgsize,1,0);
     printf("server: receive from pid=%d\n",msg.source_pid);
         msg.result_msg[0]='1';
         switch(msg.opcode){
     case '+':
        msg.result=msg.a+msg.b;
        break;

     case '-':
        msg.result=msg.a-msg.b;
        break;

     case '*':
        msg.result=msg.a*msg.b;
        break;
     case '/':
        if(msg.b!=0)
         msg.result=msg.a/msg.b;
                else
                 strcpy(msg.result_msg,"0. divide by 0.");
        break;
     default:
                 strcpy(msg.result_msg,"0. exit by user.") ;
        break;
     }

         if(msg.result_msg[0]=='1')
        printf("%.2f  %c %.2f = %.2f\n",msg.a,msg.opcode,msg.b,msg.result);
         else
        printf("%s\n",msg.result_msg);

     msg.mtype=msg.source_pid;
     msg.source_pid=getpid();
     msgsnd(msgqid,&msg,msgsize,0);
    }
        printf("server exit by client pid=%d\n",msg.mtype);
}
cleanup()
{
    msgctl(msgqid,IPC_RMID,0);
    exit(0);
}  

client.c

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <msg_mycs.h>
main()
{
    struct msgform msg;
    int pid;
    
    msgqid = msgget(MSGKEY,0777);
        
        pid=getpid();
    for(;msg.opcode!='q';){
         printf("a=");
     scanf("%lf",&msg.a);
   
         printf("b=");
     scanf("%lf",&msg.b);
   
         printf("opcode=(+,-,*,/,q for EXIT)");

    msg.opcode=getchar();
    while(msg.opcode=='\n')msg.opcode=getchar();
         
        if(msg.opcode=='+'||msg.opcode=='-'||'*'==msg.opcode ||
                '/'==msg.opcode||'q'==msg.opcode)
         { 
          msg.source_pid=pid;
          msg.mtype=1;
     
      msg.result_msg[0]=0;
      msgsnd(msgqid,&msg,msgsize,0);
      msgrcv(msgqid,&msg,msgsize,pid,0);
      
      printf("client: receive from pid=%d\n",msg.source_pid);
         
          if(msg.result_msg[0]=='1')
        printf("%.2f  %c %.2f = %.2f\n",msg.a,msg.opcode,msg.b,msg.result);
      else
        printf("%s\n",msg.result_msg);
         

         }
        }
}
  

os实验例子源代码(linux)

原文:https://www.cnblogs.com/yangminting/p/11950271.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!