本文主要是介绍shm 共享内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
shm 共享内存
- 0,命令
- 1,了解:
- 2,程序:
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/bashecho "hello world-begin"echo "可以通过ipcs查看申请的共享内存"echo "可以通过ipcrm -m shmid删除这段共享内存"gcc main.c -o mainecho "hello world-end"
- 运行
这篇关于shm 共享内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!