【问题标题】:Do you need to call shmat and shmget in both producer and consumer files?您需要在生产者和消费者文件中调用 shmat 和 shmget 吗?
【发布时间】:2013-09-22 17:42:07
【问题描述】:

在生产者过程中,我有以下。

  • MEMKEY 是 key_t 234500,并且
  • *shared_ring 是一个指向正在共享的数据结构(donut_ring)的指针。

    int shmid, semid[3];

        if((shmid = shmget (MEMKEY, sizeof(struct donut_ring),
                    IPC_CREAT | 0600)) == -1){
    perror("shared get failed: ");
    exit(1);
    

    }

    if((shared_ring = shmat (shmid, NULL, 0)) == (void *)-1){
    perror("shared attach failed: ");
    sig_handler(-1);
    

    }

假设消费者和生产者程序位于不同的文件中。

每个消费者如何找到生产者创建的共享内存ID,并将段附加到他们的地址空间?

我是否需要在消费者文件中再次调用 shmat shmid,并为每个分叉的消费者进程调用?它不会创建一个新的而不是使用一个吗?

【问题讨论】:

    标签: c shared-memory producer-consumer


    【解决方案1】:

    想通了,答案是肯定的。两个文件中都需要这两个调用。

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 1970-01-01
      • 2011-07-23
      • 2016-06-06
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2015-07-31
      • 2011-01-08
      相关资源
      最近更新 更多