linux_进程间通信_共享内存

shmget 函数 来创建共享内存

linux 系统提供共享内存的函数
头文件
#include <sys/ipc.h>
#include<sys/shm.h>

int shmget(key_t key,size_t size,int shmflg);

key参数 是ftok函数的唯一关键字 用来在系统中标识一块内存
size参数制定需要的共享内存 字节数
shmflg参数是内存的操作方式 有读写两种 成功返回共享内存的ID

void *shmat(int shmid,const void *shmaddr,int shmflg);

shmat 参数是获得ID的起始地址
shmid 参数是共享内存的ID
shmaddr参数参数指定了共享内存的地址 如果参数为0 表示让系统决定共享内存的地址 获取成功 函数返回对应的地址

int shmdt (const void *shamddr);

shmdt 函数是从程序中分离一块内存 参数shmaddr标识了要分离的共享内存的地址

上例子:

//写入共享内存
#include <sys/ipc.h>
#include<sys/shm.h>
#include<unistd.h>
#include<string.h>
int main()
{
	int shmid;
	char *ptr;
	char *shm_str="string in a share memory";
	shmid =shmget(0x90,1024,SHM_W|SHM_R|IPC_CREAT|IPC_EXCL);
	if(shmid==-1)
	{
		perror("create share memory");
	}
	ptr=(char *)shmat(shmid,0,0);
	if((void*)-1==ptr)
	{
		perror("the share memoy");
	}
	strcpy(ptr ,shm_str);
	shmdt(ptr);
	return 0;
}
//读出共享内存
#include <sys/ipc.h>
#include<sys/shm.h>
#include<unistd.h>
#include<string.h>
#include<stido.h>
 
 int main()
 {
 	int shmid;
 	char *ptr;
 	shmid = shmget (0x90,1024,SHM_W|SHM_R|IPC_EXCL);
 	if(shimd==-1)
 	{
 		perrpr("shmid the bad");
 	}
 	ptr= shmat(shmid,0,0);
 	if((void*)-1==0)
 	{
 		perror("get share memory");
 	}
 	pritnf("string in share memory :%s\n",ptr);
 	shmdt(ptr);
 	return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值