⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client1.c

📁 在linux下利用消息队列实现简单的聊天程序
💻 C
字号:
#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <unistd.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <signal.h>#define BUFSZ 512struct message{	long msg_type;	char msg_text[BUFSZ];};int main(){	int i,j;    	pid_t  pid;    	int    qid;	key_t  key;	int    len;	struct message msg;	/*根据不同的路径和关键表示产生标准的key*/	if ( (key=ftok(".",'a')) == -1 )	{		perror("ftok");		exit(1);	}	/*创建消息队列*/	if( (qid=msgget(key,IPC_CREAT|0666)) == -1 )	{		perror("msgget");		exit(1);	}	printf("opened queue %d\n",qid);		if( (pid=fork()) == -1 )	{		perror("fork");		exit(-1);	}	if(pid==0)		{	    	puts("Please enter the message to client2:");		while(1)		{			if( (fgets( (&msg)->msg_text,BUFSZ,stdin)) == NULL )			{				puts("no message!\n");				exit(1);			}			i=strcmp(msg.msg_text,"quit\n");			if(i==0)			{				msg.msg_type = 2 ;			    	if( (msgsnd(qid,&msg,BUFSZ,0)) <0 )				{					perror("message posted!\n");					exit(1);				}				sleep(1);				kill(getppid(),SIGINT);				exit(1);			}			else			{				msg.msg_type = 2 ;				//len = strlen(msg.msg_text);				/*添加消息到消息队列*/				if( (msgsnd(qid,&msg,BUFSZ,0)) <0 )				{					perror("message posted!\n");					exit(1);				}				sleep(1);			}		}	}	else	{		while(1)			{		    	if(msgrcv(qid,&msg,BUFSZ,1,0) <0 )			{				perror("msgrcv");				exit(1);			}			j=strcmp(msg.msg_text,"quit\n");			if(j==0)			{				printf("Client2 exit!\n");				printf("Exit in 1 second!\n");				sleep(1);				exit(1);			}			else			{			    	printf("Receive message from client2:%s\n",(&msg)->msg_text);			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -