Linux系统软中断和消息队列结合

Linux系统软中断和消息队列结合实现一发一收

直接放代码:

#include<stdio.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#include<stdlib.h>
#include<string.h>
#include<signal.h>
#include<unistd.h>
#define MSGKEY 75
struct msgfrom{
        long mtype;
        char msgtext[1030];
}msg;
int msgqid,i;
void SERVER();
int state;
 int m,n;
void CLIENT();
void stop()
{
  state=0;
}
void waiting()
{
  while(state!=0);
}
int main()
{
            while((i=fork())==-1);
            if(i>0)
              {
                SERVER();
              }
            else{
                CLIENT();
            }
        wait(0);
	wait(0);
}
void SERVER(){
        msgqid=msgget(MSGKEY,0777|IPC_CREAT);
        state=1;
        signal(SIGINT,stop);
        waiting();
        do
        {
        
                msgrcv(msgqid,&msg,1030,0,0);
                printf("(server)received message %d  ",msg.mtype);
                printf("%s",msg.msgtext);
                kill(n,17);
        }while(msg.mtype!=1);
        msgctl(msgqid,IPC_RMID,0);
        exit(0);
}
void CLIENT()
{
        int i;
        char string_i[50];
        msgqid=msgget(MSGKEY,0777);
        m=getppid();
        n=getpid();
        signal(SIGINT,SIG_IGN);
        for(i=10;i>=1;i--)
        {
                msg.mtype=i;
                printf("(client)sent\n");
                sprintf(msg.msgtext,"the content of message is :");
                       sprintf(string_i,"message  %d",i);
                strcat(msg.msgtext,string_i);
                strcat(msg.msgtext,"\n");
                msgsnd(msgqid,&msg,1030,0);
                        state=1;
                        signal(17,stop);
                        waiting();
        }
        exit(0);
}

                      

运行结果:
在这里插入图片描述
实现思路比较简单,还有很多方法可以实现。

  • 9
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值