linux下共享内存

2018-09-13  本文已影响0人  小雨启明
1、定义和理解

共享内存就是允许两个不相关的进程访问同一个逻辑内存。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。

2、使用流程
1)创建共享内存 shmget

函数原型

int shmget(key_t key, size_t size, int flags);
2)将共享内存挂载到线性地址上 shmat -- at:attach

函数原型

void *shmat(int shm_id, const void *shm_addr, int shmflg);
3)从进程中卸载该共享内存 shmdt -- dt:detach
int shmdt(const void *shm_addr);
4)控制共享内存 shmctl()函数 -- ctl:control
int shmctl(int shm_id, int command, struct shmid_ds *buf);

函数参考:https://www.cnblogs.com/52php/p/5861372.html

3、简单示例 无错误处理

查看ipc命令 ipcs

# a.c
#include<unistd.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>
#include<string.h>

int main(){
    int id = shmget(0x8888,4096,IPC_CREAT|IPC_EXCL|0664);
    printf("%d\n",id);

    char * buf = shmat(id,NULL,0);

    strcpy(buf,"12345\n");

    shmdt(buf);

    return 0;
}
#b.c
#include<unistd.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>
#include<string.h>

int main(){
    int id = shmget(0x8888,0,0);
    printf("%d\n",id);

    char *buf = shmat(id,NULL,0);
    printf("%s\n",buf);
    shmdt(buf);
    return 0;
}

上一篇 下一篇

猜你喜欢

热点阅读