【Linux篇】共享内存

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
//共享内存的创建/删除(映射)
int main()
{
	int shmid;
	shmid = shmget(IPC_PRIVATE,128,0777);
	if(shmid < 0)//判断共享内存是否创建成功
	{
		printf("create share memory failed!\n");
		return -1;
	}
	printf("create share memory success ,shmid = %d\n",shmid);//打印共享内存ID
	system("ipcs -m");
	return 0;
}

 

 

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
//共享内存的映射
int main()
{
	int shmid;
	int key;
	char *p;
	key = ftok("msg.c",1);
	if(key < 0)//判断ftok是否创建成功
	{
		printf("ftok failed\n");
		return -2;
	}
	printf("ftok success ,key:%x\n",key);
	shmid = shmget(key,128,IPC_CREAT|0777);
	if(shmid < 0)//判断共享内存是否创建成功
	{
		printf("create share memory failed!\n");
		return -1;
	}
	printf("create share memory success ,shmid = %d\n",shmid);
	system("ipcs -m");//ipcs -m指令,查看共享内存进程

	p = (char *)shmat(shmid,NULL,0);
	if(p == NULL)//判断是否映射成功
	{
		printf("shmat funtion failed!\n");
		return -3;
	}
    //相当于半双工读写
	//write to share memory
	fgets(p,128,stdin);
	//read from share memory
	printf("share memory data is %s\n",p);
	return 0;
}

 

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
//删除共享内存(对象)
int main()
{
	int shmid;
	int key;
	char *p;
	key = ftok("msg.c",1);
	if(key < 0)
	{
		printf("ftok failed\n");
		return -2;
	}
	printf("ftok success ,key:%x\n",key);
	shmid = shmget(key,128,IPC_CREAT|0777);
	if(shmid < 0)
	{
		printf("create share memory failed!\n");
		return -1;
	}
	printf("create share memory success ,shmid = %d\n",shmid);
	system("ipcs -m");

	p = (char *)shmat(shmid,NULL,0);
	if(p == NULL)
	{
		printf("shmat funtion failed!\n");
		return -3;
	}
	//write to share memory
	fgets(p,128,stdin);
	//read from share memory
	printf("share memory data is %s\n",p);

	shmdt(p);
	shmctl(shmid,IPC_RMID,NULL);
	system("ipcs -m");
	return 0;
}

 

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <string.h>
//共享内存实现ipcrm
int main(int argc,char *argv[])
{
	int shmid;
	if(argc < 3)
	{
		printf("input error!\n");
		return -1;
	}
	if(strcmp(argv[1],"-m") == 0)
	{
		printf("delete share memory\n");
	}
	else
	{
		return -2;
	}
	shmid = atoi(argv[2]);
	printf("delete share memory id :%d\n",shmid);
	shmctl(shmid,IPC_RMID,NULL);
	system("ipcs -m");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值