如何将列表的节点存储到共享内存中

时间:2019-04-11 01:54:05

标签: c pipe fork shared-memory

我正在尝试使许多客户端通过许多终端彼此通信。我在程序中有fork,并且创建了管道,以便客户端可以从其他客户端读取/写入其他客户端。因为我创建了许多进程,所以我需要共享内存存储一些信息,特别是我想存储每个孩子创建的节点。我该怎么做?

这是我的结构:

typedef struct client{
    char *numofclient;
    struct client *nextclient;
}client;

2 个答案:

答案 0 :(得分:0)

在分叉任何东西之前,先使用mmap创建一个共享内存区域。阅读手册页并使用共享标志。如果在Windows上与众不同,那么请查找VirtualAlloc,当然您不能拨叉。

您将需要一个内存分配器来共享内存。这可能非常简单:只需为分配分配一个char指针,就不会释放任何东西。或者,它可以随您想要而复杂。您也许可以在线找到图书馆。

如果需要互斥锁,请在共享内存区域中创建一个互斥锁,并确保将标志用于共享互斥锁。

由于要派生,因此可以使用指针,因为共享内存将在每个进程副本中保持映射到位。否则,您需要从地图开始使用偏移。

答案 1 :(得分:0)

我认为您可以使用shmget来读取systemV共享内存,并阅读手册页。 您可以决定要创建多少个进程的上限,并为shmget提供相应的大小。 因此,无论何时您的子进程想要存储列表,它都可以附加到共享内存并将其数据附加到共享内存中。