Linux 进程间通信之消息队列

//send.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include<string.h>


typedef struct{
	long type;
	char name[20];
	int age;

}Msg;

int main(int argc,char*argv[])
{
	key_t key=ftok("/home/zdg",'6');
	printf("key:%x\n",key);
	
	int msgid=msgget(key,IPC_CREAT|O_WRONLY|0777);
	if(msgid<0)
	{
		perror("msgget error\n");
		exit(-1);
	}
	Msg m;
	while(1)
	{
	puts("please input your type:");
	scanf("%ld",&m.type);
	
	puts("please input you name:");
	//scanf("%s",m.name);
	while(getchar()=='\n');
	if(fgets(m.name,sizeof(m.name),stdin)!=0)
	{
		
		int len=strlen(m.name);
		m.name[len-1]='\0';
	}
	puts("please input you age:");
	scanf("%d",&m.age);

	int ret_val=msgsnd(msgid,&m,sizeof(m)-sizeof(m.type),0);
		if(ret_val<0)
		{
			perror("msgsnd");
			break;
		}
		
	}
		return 0;
}

//recv.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>

   
typedef struct 
{
	long type;
	char name[20];
	int age;

}Msg;
int main(int argc,char*argv[])
{
	key_t key=ftok("/home/zdg",'6');
	printf("key:%x\n",key);
	
	int msgid=msgget(key,O_RDONLY);
	if(msgid<0)
	{
		perror("msgget");
		return -1;
	}
	Msg rcv;
	long type;
	while(1)
	{
	printf("please input type you want!");
	scanf("%ld",&type);

	int ret_val=msgrcv(msgid,&rcv,sizeof(rcv)-sizeof(type),type,0);
	if(ret_val<0)
	{
		perror("msgrcv");
		break;
	}
	printf("rcv-name:%s age:%d\n",rcv.name,rcv.age);
	
	}
	msgctl(msgid,IPC_RMID,NULL);
	return 0;


	
}

 

 

#Makefile
all: recv send

recv:recv.o
	gcc -o recv recv.c

send:send.o
	gcc -o send send.c
	
clean:
	rm recv send *.o

运行结果:

send

zdg@ubuntu:/mnt/hgfs/SHARE/Project/messagequen$ ./send
key:3601295a
please input your type:
123
please input you name:
zhang donggan 
please input you age:
25

recv

zdg@ubuntu:/mnt/hgfs/SHARE/Project/messagequen$ ./recv
key:3601295a
please input type you want!123
rcv-name:zhang dong gang  age:27
please input type you want!123
rcv-name:zhang donggang  age:28
please input type you want!123
rcv-name:hang donggan  age:25
please input type you want!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值