父进程创建一个共享存储区,然后创建子进程;采用软中断实现父进程发送信息和子进程接受信息的同步

#include<unistd.h>
#include<string.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<iostream>
#include<cstdio>
#include<sys/wait.h>
#include<cstdlib>
#include<signal.h>

using namespace std;
int k;
void int_func(int sig){
    k=0;
}
int main(){
    int pid;
    signal(SIGUSR1,int_func);
    k=1;
    int shmid ;
    shmid = shmget(1234,1024,0666|IPC_CREAT);
    char* shm_addr=(char*)shmat(shmid,0,0);
    // cout<<shm_addr<<endl;
    while((pid=fork())==-1);
    if(pid==0){
        //子进程
        while(k==1);
        cout<<"recieve message from parent :\n"<<shm_addr<<endl;

        shmdt(shm_addr);
        shmctl(shmid,IPC_RMID,0);
        exit(0);
    }else{
        cout<<"please inputs your message ,'end' is end"<<endl;
        while(1){
            char buffer[1024];
            fgets(buffer,1024,stdin);
            strcat(shm_addr,buffer);
            if(strncmp(buffer,"end",3)==0)break;
            sleep(1);
        }
        shmdt(shm_addr);
        kill(pid,SIGUSR1);
        exit(0);
    }
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值