package 阿里巴巴 less file knockoutjs eking文件 vue基础教程 vue自定义组件 后台ui模板 pmp培训视频 品优购电商系统开发 前端项目实战 ps视频教程全集完整版 jquery的each循环 jquery选择子元素 html好看的字体样式 git下载代码到本地命令 python高级 python写文件 如何配置python环境 python当前日期 python函数的调用 java继承 javaforeach java遍历 java获取文件 服务器操作系统下载 subprocess java游戏编程 什么软件买电影票便宜 相册制作工具 目标聚光灯 苹果手机常去地点 软碟通u盘装系统教程 视频旋转软件 祸星龙 巫师3福利 美图秀秀pc版下载 img转iso pr怎么消除杂音
当前位置: 首页 > 学习教程  > 编程语言

多进程实现共享内存的简单通信

2020/8/11 19:56:58 文章标签:

更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。

进程1:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
#include <errno.h>

int id;
char *p;

void finish()
{
	shmdt(p);												//解除共享内存映射
	shmctl(id,IPC_RMID,NULL);								//删除共享内存
	printf("成功退出程序!\n");
	exit(0);												//退出程序
}

int main()
{
	signal(SIGINT,finish);
	int key = ftok("/home/jiajia", 900);					//申请一个键值
	id = shmget(key,2048,IPC_CREAT|IPC_EXCL|0777);			//申请一s个共享内存的ID
	if(id == -1)
	{
		if(errno == EEXIST)									//如果此ID的共享内存已存在
		{
			id = shmget(key,2048,0777);						//直接打开
		}
		else
		{
			perror("申请失败!\n");
			return -1;
		}
	}
	
	p = shmat(id, NULL, 0);									//映射共享内存
	bzero(p,2048);											//清空

	while(1)
	{
		printf("p1输入:");
		scanf("%s",p);										//往共享内存输入内容
	}
}

进程2:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
#include <errno.h>

int id;
char *p;

void finish()
{
	shmdt(p);
	shmctl(id,IPC_RMID,NULL);
	printf("成功退出程序!\n");
	exit(0);												//退出程序
	
}

int main()
{
	signal(SIGINT,finish);
	int key = ftok("/home/jiajia", 900);					//申请一个键值
	id = shmget(key,2048,IPC_CREAT|IPC_EXCL|0777);			//申请一s个共享内存的ID
	if(id == -1)
	{
		if(errno == EEXIST)									//如果此ID的共享内存已存在
		{
			id = shmget(key,2048,0777);						//直接打开
		}
		else
		{
			perror("申请失败!\n");
			return -1;
		}
	}
	
	p = shmat(id, NULL, 0);									//映射共享内存
	bzero(p,2048);											//清空

	while(1)
	{
		if(strlen(p)!= 0)									//如果共享内存内不为空
		printf("p2输出:%s\n",p);							//输出共享内存内容 
		bzero(p,2048);										//输出后再次清空
	}
}

本文链接: http://www.dtmao.cc/news_show_100265.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?