共享内存代码

来源:互联网 发布:倩女幽魂有没有mac版 编辑:程序博客网 时间:2024/05/21 08:45
#include <stdio.h>#include <sys/ipc.h>#include <sys/shm.h>#include <string.h>#include <unistd.h>#include <stdlib.h>int main(){    int shmid=shmget(IPC_PRIVATE,100,IPC_CREAT | 0666);//创建一个公共区域//      内存ID      只能用于父子,大小,权限(给予权限或,检查权限与)    if(shmid == -1)    {        perror("shmget");        exit(-1);//结束进程    }    pid_t pid=fork();    else if(pid==0)//子进程    {            void* p=shmat(shmid,NULL,0);//将共享内存映射到当前进程地址空间                              //后面两个一般固定为0            strcpy((char*)p,"hello");//写            sleep(1);//等父进程写完//用信号方式更精确            printf("父进程说:%s\n",p);//读            shmdt(p);//取消映射    }    else//父进程    {            void* p=shmat(shmid,NULL,0);                char msg[100];        //  wait(NULL);//自行确保子进程已经写完            sleep(1);            strcpy(msg,(const char*)p);//读//共享内存没有同步处理机制            printf("子进程说:%s\n",msg);            sprintf(p,"%s","hi");            shmdt(p);//取消映射            shmctl(shmid,IPC_RMID,NULL);//删除共享内存                }    return 0;}