c - 是否需要在生产者和消费者文件中调用 shmat 和 shmget ?

标签 c shared-memory producer-consumer

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

  • 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,并将该段附加到其地址空间?

我是否需要在消费者文件中以及对于 fork 的每个消费者进程再次调用 shmat shmid?它不会创建一个新的而不是使用那个吗?

最佳答案

弄清楚了,答案是肯定的。这两个文件中的这两个调用都是必需的。

关于c - 是否需要在生产者和消费者文件中调用 shmat 和 shmget ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946834/

相关文章:

ios - 最大值是多少。 iOS 上的 double/float 的值?

c - 带有两个 IF 语句的 While 循环

c - C程序设计

编译错误的文件?

c++ - 生产者-消费者模型

c++ - 如果进程崩溃,映射文件会怎样?

c++ - C 或 C++ - 动态增长/收缩磁盘支持的共享内存

c - C 中使用共享内存的 IPC

java - 可以等待再次唤醒上下文切换的线程

java - 为什么下面的生产者消费者代码不需要volatile变量?