0

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

  • 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,并为每个分叉的消费者进程调用?它不会创建一个新的而不是使用一个吗?

4

1 回答 1

0

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

于 2013-09-23T11:52:27.400 回答