消息队列实现多人聊天

三个人:lucy,bob,tom之间的聊天

Lucy.c

#include
#include
#include
#include
#include
#include
#include
#include
//lucy类型10 bob类型11 tom类型12
typedef struct msg
{
    long type; //接收者类型
    char text[100]; //发送内容
    char name[20]; //发送者姓名
}MSG;
char *p_name[]={"lucy","bob","tom"};
int n = sizeof(p_name)/sizeof(p_name[0]);

int p_type[]={10,11,12};
int main()
{
	//获得唯一的key
	key_t key = ftok("/", 2020);
	
	//创建一个消息队列
	int msg_id = msgget(key, IPC_CREAT|0666);
	printf("msg_id = %d\n", msg_id);
	
	int i=0;
	for(i=0;i<2; i++)
	{
		pid_t pid = fork();
		if(pid == 0)
			break;
	}
	if(i==0)//子进程1  发
	{
		while(1)
		{
			char name[32]="";
			printf("请输入发送的姓名:");
			scanf("%s",name);
			getchar();
			int i=0;
			for(i=0;i 0)//等到一个退出
			{
				printf("子进程%d退出了\n",pid);
			}
			else if(pid ==0)//还有子进程在运行
			{
				continue;
			}
			else if(pid == -1)//所有子进程都退出了
			{
				break;
			}
		}
	
	}
}

bob.c

#include
#include
#include
#include
#include
#include
#include
#include
//lucy类型10 bob类型11 tom类型12
typedef struct msg
{
    long type; //接收者类型
    char text[100]; //发送内容
    char name[20]; //发送者姓名
}MSG;
char *p_name[]={"lucy","bob","tom"};
int n = sizeof(p_name)/sizeof(p_name[0]);

int p_type[]={10,11,12};
int main()
{
	//获得唯一的key
	key_t key = ftok("/", 2020);
	
	//创建一个消息队列
	int msg_id = msgget(key, IPC_CREAT|0666);
	printf("msg_id = %d\n", msg_id);
	
	int i=0;
	for(i=0;i<2; i++)
	{
		pid_t pid = fork();
		if(pid == 0)
			break;
	}
	if(i==0)//子进程1  发
	{
		while(1)
		{
			char name[32]="";
			printf("请输入发送的姓名:");
			scanf("%s",name);
			getchar();
			
			int i=0;
			for(i=0;i 0)//等到一个退出
			{
				printf("子进程%d退出了\n",pid);
			}
			else if(pid ==0)//还有子进程在运行
			{
				continue;
			}
			else if(pid == -1)//所有子进程都退出了
			{
				break;
			}
		}
	
	}
}

tom.c

#include
#include
#include
#include
#include
#include
#include
#include
//lucy类型10 bob类型11 tom类型12
typedef struct msg
{
    long type; //接收者类型
    char text[100]; //发送内容
    char name[20]; //发送者姓名
}MSG;
char *p_name[]={"lucy","bob","tom"};
int n = sizeof(p_name)/sizeof(p_name[0]);

int p_type[]={10,11,12};
int main()
{
	//获得唯一的key
	key_t key = ftok("/", 2020);
	
	//创建一个消息队列
	int msg_id = msgget(key, IPC_CREAT|0666);
	printf("msg_id = %d\n", msg_id);
	
	int i=0;
	for(i=0;i<2; i++)
	{
		pid_t pid = fork();
		if(pid == 0)
			break;
	}
	if(i==0)//子进程1  发
	{
		while(1)
		{
			char name[32]="";
			printf("请输入发送的姓名:");
			scanf("%s",name);
			getchar();
			
			int i=0;
			for(i=0;i 0)//等到一个退出
			{
				printf("子进程%d退出了\n",pid);
			}
			else if(pid ==0)//还有子进程在运行
			{
				continue;
			}
			else if(pid == -1)//所有子进程都退出了
			{
				break;
			}
		}
	
	}
}

运行结果

 

消息队列实现多人聊天_第1张图片

 

你可能感兴趣的:(linux系统编程)