您的位置:首页 > 运维架构 > Linux

linux进程通信之共享内存高级议题

2017-05-10 20:52 295 查看
共享内存如果不删除就让进程死亡,则这片内存是没有释放的。

如果进程中有没有调用shmdt进行分离,则内存的连接计数仍然保持,即使使用ipcrm -m 共享内存id 命令进行删除后连接计数扔保持。

在用fork创建子进程之前创建并连接内存,子进程会继承,在之后创建和连接也是可以的。

#include <sys/types.h>   

#include <sys/ipc.h>   

#include <sys/shm.h>   

#include <stdio.h>   

  

#define BUF_SIZE 1024   

#define MYKEY 25   

int main()  

{  

    int shmid;  

    char *shmptr;  

    if((shmid = shmget(MYKEY,BUF_SIZE,IPC_CREAT)) ==-1)  

    {  
printf("shmget error \n");  

    exit(1);  

    }  

    shmptr =shmat(shmid,0,0);

    if( shmptr == (void *)-1)  

    {  
   perror("shmat error!\n");  
   exit(1);  

    }  

   if(fork() == 0)
{
printf("%d\n",shmptr);
while(1)  
{  
printf("input:");  
scanf("%s",shmptr);  
}  
}
else
{
printf("%d\n",shmptr);
while(1)
{
printf("string :%s\n",shmptr);  
sleep(3);  
}


    exit(0);  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux编程