0,命令
ipcs 查看分配的共享内存
ipcrm -m shmid 删掉分配的共享内存
1,了解:
1),进程通信的一种
2),地址映射出来后,就不用到内核里面去读取了,所以是一种高效的进程通信方式
3)一些函数
shmget创建一段用来共享的内存
shmat地址映射
shmdt删除映射出来的一段内存
shmctl删除最根本的一段内存
2,程序:
- main.c
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int shmid;
pid_t pid;
char * s_addr,* p_addr;
shmid =shmget( IPC_PRIVATE , 1024 , 0777);
if(shmid < 0)
{
printf("分配失败\n");
exit(1);
}
printf("shmid:(%d)的这段共享内存申请成功,大小为1024个字节\n",shmid);
pid = fork();
if(pid > 0)
{
p_addr = shmat(shmid,NULL,0);
strncpy(p_addr,"hello",5);
printf("向共享内存中写入hello\n");
wait(NULL);
exit(0);
}else if(pid ==0)
{
sleep(2);
s_addr = shmat(shmid,NULL,0);
printf("读取到共享内存:(%s)\n",s_addr);
int ret = shmctl(shmid, IPC_RMID, NULL);
if(0 == ret)
{
printf("id为[%d]的这段共享内存,删除成功\n",shmid);
}
exit(0);
}
return 0;
}
- run.sh
#!/bin/bash
echo "hello world-begin"
echo "可以通过ipcs查看申请的共享内存"
echo "可以通过ipcrm -m shmid删除这段共享内存"
gcc main.c -o main
echo "hello world-end"
- 运行