介绍

共享内存是一段物理数据区域,可以被映射到多个进程进行直接读写访问。十分方便。
使用方式是 创建–映射–直接使用–取消映射–删除共享内存

函数

//创建并获取共享内存区
int shmget(key_t key, size_t size, int shmflg);
//映射内存
void *shmat(int shmid, const void *shmaddr, int shmflg);
//取消映射
int shmdt(const void *shmaddr);
//共享内存控制--用于删除共享内存区
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

举例

shareWrite.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <string.h>

#define SHMKEY 1234
#define SHMSIZE 4096

struct shmbuf{


    char sbuf[32];
};

int main(){
    int shmid;
    void *shmaddr;
    struct shmbuf *sbuf;
        
    shmid = shmget(SHMKEY,SHMSIZE,IPC_CREAT|0666);
    if(shmid == -1){
        
        perror("shmget");
        exit(1);
    }    

    shmaddr = shmat(shmid,NULL,0);
    if(shmaddr == NULL){
        
        perror("shmat");
        exit(1);
    }
        
    sbuf = (struct shmbuf*)shmaddr;    
    strcpy(sbuf->sbuf,"Hello,This is a shm test!");
    printf("Send the msg");
        
    shmdt(shmaddr);
    while(1);
    
    return 0;
}

shareRead.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <string.h>

#define SHMKEY 1234
#define SHMSIZE 4096

struct shmbuf{


    char sbuf[32];
};

int main(){

    int shmid;
    void *shmaddr;
    struct shmbuf *sbuf;
        
    shmid = shmget(SHMKEY,SHMSIZE,0);
    if(shmid == -1){
        
        perror("shmget");
        exit(1);
    }    

    shmaddr = shmat(shmid,NULL,0);
    if(shmaddr == NULL){
        
        perror("shmat");
        exit(1);
    }
        

    sbuf = (struct shmbuf*)shmaddr;
    printf("Got the msg: %s\n",sbuf->sbuf);

    shmdt(shmaddr);
    shmctl(shmid,IPC_RMID,NULL);

    return 0;
}


标签: Linux, int, 共享内存, include, struct, shmid, shmaddr, sbuf

相关文章推荐

添加新评论,含*的栏目为必填