当前位置: 首页 > article >正文

假期day1

第一天:请使用消息队列实现2个终端之间互相聊天

singal1.c

 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <pthread.h>
 #include <semaphore.h>
 #include <wait.h>
 #include <signal.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <sys/socket.h>
 #include <sys/ipc.h>
 #include <sys/sem.h>
 #include <semaphore.h>
 #include <sys/msg.h>
 #include <sys/shm.h>
 #include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;

key_t key;
int id;
typedef struct msgbuf
{
	long channel;
	char buf[128];
}msg_t;


void msg_w()
{
	msg_t msg;
	msg.channel = 1;
	while(1)
	{
		memset(msg.buf,0,128);
		//printf("张三:");
		scanf("%s",msg.buf);
		while(getchar()!=10);
		msgsnd(id,&msg,strlen(msg.buf),0);
	}
}

void msg_r()
{
	msg_t msg = {0};
	while(1)
	{
		memset(msg.buf,0,128);
		msgrcv(id,&msg,128,2,0);
		printf("好友李四:%s\n",msg.buf);
	}

}

void* pthread_main(void* arg)
{
	msg_w();
}

void handler(int signum)
{
	if(SIGINT == signum)
	{
		msgctl(id,IPC_RMID,NULL);
		exit(0);
	}
}

int main(int argc, const char *argv[])
{
	key = ftok("./ipc",2);
	id = msgget(key,IPC_CREAT | 0666);

	pthread_t pthread_id;
	signal(SIGINT,handler);
	pthread_create(&pthread_id,0,pthread_main,NULL);
	pthread_detach(pthread_id);
	msg_r();

	return 0;
}

singal2.c

#include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <pthread.h>
 #include <semaphore.h>
 #include <wait.h>
 #include <signal.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <sys/socket.h>
 #include <sys/ipc.h>
 #include <sys/sem.h>
 #include <semaphore.h>
 #include <sys/msg.h>
 #include <sys/shm.h>
 #include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;

key_t key;
int id;
typedef struct msgbuf
{
	long channel;
	char buf[128];
}msg_t;


void msg_w()
{
	msg_t msg;
	msg.channel = 2;
	while(1)
	{
		memset(msg.buf,0,128);
		//printf("李四:");
		scanf("%s",msg.buf);
		while(getchar()!=10);
		msgsnd(id,&msg,strlen(msg.buf),0);
	}
}

void msg_r()
{
	msg_t msg = {0};
	while(1)
	{
		memset(msg.buf,0,128);
		msgrcv(id,&msg,128,1,0);
		printf("好友张三:%s\n",msg.buf);
	}

}

void* pthread_main(void* arg)
{
	msg_r();
}

void handler(int signum)
{
	if(SIGINT == signum)
	{
		msgctl(id,IPC_RMID,NULL);
		exit(0);
	}
}

int main(int argc, const char *argv[])
{
	key = ftok("./ipc",2);
	id = msgget(key,IPC_CREAT | 0666);

	pthread_t pthread_id;
	signal(SIGINT,handler);
	pthread_create(&pthread_id,0,pthread_main,NULL);
	pthread_detach(pthread_id);
	msg_w();

	return 0;
}


http://www.kler.cn/a/516665.html

相关文章:

  • 信息收集(下)
  • js学习笔记(2)
  • 把网站程序数据上传到服务器的方法和注意事项
  • OpenStack基础架构
  • 【C++基础】多线程并发场景下的同步方法
  • LabVIEW 太阳能光伏发电系统智能监控
  • NPM 与 Node.js 版本兼容问题:npm warn cli npm does not support Node.js
  • 文献阅读 250123-Accelerated dryland expansion under climate change
  • 从 TCP/IP 演进看按序流与性能
  • tortoiseSVN图标缺少绿色钩/tortoiseSVN图标不显示解决方案
  • EDI安全:2025年数据保护与隐私威胁应对策略
  • 【面试】Java 记录一次面试过程 三年工作经验
  • git rebase的使用
  • 在K8S中使用Values文件定制不同环境下的应用配置详解
  • ArrayFire异构计算
  • YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等
  • C++ 入门速通-第1章【黑马】
  • smb共享文件夹当被共享文件的电脑关机了还能正常获取文件吗
  • linux系统centos版本上安装mysql5.7
  • Excel表格转换成PDF文件时显示不全怎么处理?
  • 绘制决策树的尝试1
  • Linux下的编辑器 —— vim
  • QTableView和QTableWidget的关系与区别
  • Leecode刷题C语言之收集所有金币可获得的最大积分
  • 【C++】string类使用详解
  • 【数据可视化】全国星巴克门店可视化