多进程ipc之共享内存

进程间通讯(ipc)之共享内存:

(1)进程间通讯比较快速的一种,常与信号量一起操作
(2)本质是进程间使用同一块内存
(3)因为进程间使用的是同一块内存,因此在一个进程间改变了共享内存里的数据,其他进程中的同一块共享内存的数据也会随之被改变


这是关于ipc的一些操作,点击跳转

我们换个通俗点的说法:现在有小红和小绿,他们是合租室友;但是呢,他们租的房子里面只有一间浴室,然后约定浴室里面地洗发水一起买来用,为了防止别人来他们房子用他们的浴室(就当为了省买洗发水的钱和水费),然后他们就给浴室上了锁,只有他们两个有钥匙,如果有其他人还想来一起合租用浴室就需要他自己再去配一把钥匙,有钥匙的小红和小绿因为有钥匙于是他们就能一起使用浴室,并且里面的东西是共用的;小红和小绿就相当于进程,浴室就是共享内存

在这里插入图片描述

相关函数API:

//创建键值函数
//函数头文件
#include <sys/types.h>
#include <sys/ipc.h>

//函数原型
key_t ftok(const char *pathname, int proj_id);

//函数介绍:
/********************************************************
函数作用:用于创建一个键值,
				键值作用 :用于进程间通讯(ipc)时的一个标识符,不会因进程退出而消失

形参:pathname:路径名-->通过哪一个路径来获得键值

	 proj_id( project identifier):项目id:即我们指定给它一个8位(一个字节,最大256)的整数,
	 								同一路径下不能由两个相同的键值

注:其实可以看成路径下的消息队名为给它的数

返回值:
		成功:新生成且未被使用的键值
		失败:-1


********************************************************/

//创建共享内存
//函数头文件
#include <sys/ipc.h>
#include <sys/shm.h>

//函数原型
int shmget(key_t key, size_t size, int shmflg);

//函数介绍:
/********************************************************

函数作用:用于创建一个共享内存

形参:
	key:通过ftok函数创建成功返回的键值

	size:共享内存的大小字节数
	 				
	shmflg:
		IPC_CREAT:当共享内存不存在时就创建一个共享内存
		(当创建共享内存时需要位或上创建共享内存后它的操作权限)

		IPC_EXCL:当共享内存已经存在时就报错


返回值:
		成功:共享内存的id号(标识符)
		失败:-1


********************************************************/



测试代码:
/*
*创建共享内存
*/
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>

int main()
{
   
	//产生键值
	key_t key = ftok(".",1);
	if
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值