Linux操作系统之进程通信——利用共享存储区实现SERVER和 CLIENT的通信

实现思路如下:

 

  • 用fork( )创建子进程,利用共享存储区实现SERVER和 CLIENT的通信
  • SERVER建立一个KEY为75的共享区: 若共享区的第一个字节为-1 ,则表示空闲。
    • 若共享区的第一个字节为-1 ,则表示空闲。
    • 若该字节值发生变化,则表示收到了消息,读取后再次把值设为-1。
    • SERVER每接收到一次数据后显示“(server)received”。
    • 若遇到的值为0,则视为结束信号,取消该队列,并退出。

 

  • CLIENT端建立一个为75的共享区:
  • 若共享区的第一个字节为-1, 则表示该单元空闲,可发送请求
  • CLIENT 随即填入9到0,期间等待Server端再次空闲。
  • CLIENT每发送一次数据后显示“ (client)sent”。
  • 进行完这些操作后, CLIENT退出。

详细代码如下:

#include<sys/types.h>      
#include<sys/msg.h>
#include<sys/ipc.h>
#define SHMKEY  75      /*定义共享区关键词*/
void CLIENT()
{ int shmid,i;
  int *addr;
  shmid=shmget(SHMKEY,1024, 0777|IPC_CREAT); 
   /*获取共享区,长度1024,关键词SHMKEY*/
  addr=shmat(shmid,0,0);        /*共享区起始地址为addr*/	
	for(i=9;i>=0;i--) 	
	{  while(*addr!= -1);                  		
	   printf("(client)sent\n"); 
	   *addr=i;           /*把i赋给addr*/	
	}	
	exit(0);
}
void SERVER()   
{ int shmid;
  int *addr;
  shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);  
   /*创建共享区*/	
	addr=shmat(shmid,0,0); /*共享区起始地址为addr*/
   *addr=-1;	
	do	
	{ while(*addr ==-1);	
	  printf("(server)received\n%d",*addr);      
    if(*addr!=0)
      *addr=-1;	
	} while(*addr!=0);	
   wait(0);
	shmctl(shmid,IPC_RMID,0);
}
void main() 
{ 
	if(fork())
	{ 
           SERVER();	
	}else
	{ 
           CLIENT();	
	}
 }

    END

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值