linux进程间通信-------共享内存

Linux系统中的两个进程可以通过共享内存的方式来进行通信,属于IPC通信,也就意味着和键值有关。。。

首先通过某个进程创建一片共享内存,创建的这片共享内存会返回一个描述符,这样其它的进程也可以使用这片内存。要使用共享内存的进程都必须先把那片内存映射到要调用的进程里,这里可以自己创建一个结构,用这个结构的指针来指向这片地址。

用完共享内存后,要把共享内存和进程分离,最后分离的进程还要把这块共享内存删除。

用到的函数有
shmget 创建/获取共享内存
shmat   映射共享内存
shmdt   脱离(分离)共享内存
shmctl   控制共享内存(其中可以删除共享内存)

#include
#include
#include
#include
#include
#include
#include

#define TEXT_SZ 2048

struct shared_use_st
{
    int written_by_you;
    char some_text[TEXT_SZ];
};

int main()
{
    int shmid;
    int running = 1;
    struct shared_use_st *shared_stuff;
    char buffer[TEXT_SZ];
     
    //1.创建共享内存
    shmid = shmget((key_t)1234, sizeof(struct shared_use_st), IPC_CREAT);
    if(shmid == -1)
    {
      printf("creat shmid failed\n");
      exit(EXIT_FAILURE);
    }
     
    //2.映射共享内存
    shared_stuff = (struct shared_use_st *)shmat(shmid, NULL, 0);
     
    //3.循环
    while(running == 1)
    {
      while(shared_stuff->written_by_you == 1)
      {
          sleep(1);
          printf("wait readprocess!\n");
      }
     
      //3.1 获取用户输入
      fgets(buffer, TEXT_SZ, stdin);
     
      //3.2 将用户输入的字符串放入共享内存
      strncpy(shared_stuff->some_text, buffer, TEXT_SZ);
      shared_stuff->written_by_you = 1;
     
      if(strncmp(buffer, "end", 3) == 0)
          running = 0;
    }    
     
    //4.脱离共享内存
    shmdt((const void *)shared_stuff);
     
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值