共享内存是operating system 的一项功能(C11 中不存在该功能)。它不是由 C 标准“提供”的。
我猜你正在为 Linux 编码。顺便说一句,请阅读Advanced Linux Programming。
先阅读shm_overview(7)。您需要同步,请参阅sem_overview(7)。
您将在一个指针中获取一些共享内存段,然后您将使用该指针。
首先,用shm_open(3)打开共享内存段:
int shfd = shm_open("/somesharedmemname", O_RDWR|O_CREAT, 0750);
if (shfd<0) { perror("shm_open"); exit(EXIT_FAILURE); };
然后在那个shfd上使用mmap(2):
void* ad = mmap(NULL, sizeof(struct1), PROT_READ|PROT_WRITE, MAP_SHARED,
shfd, (off_t)0);
if (ad==MAP_FAILED) { perror("mmap"); exit(EXIT_FAILURE); };
然后您可以将该地址转换为指针:
struct1* ptr = (struct1*)ad;
并使用它。 (别忘了close)。
顺便说一句,您不这样做并且您不能将变量放入共享内存中。您会获得一个指向该共享内存的指针并使用它,例如ptr->a = 23;
当然,不要期望在不同进程中将相同的共享段映射到相同的地址(因此您不能轻松处理像c 这样的指针字段)。您可能应该避免共享 struct-s 中的指针字段。
请注意,C 变量仅在编译时存在。在运行时,您只有位置和指针。
PS。共享内存是一个相当困难的inter-process communication 机制。您或许应该更喜欢pipe(7)-s 或fifo(7)-s,并且您需要使用poll(2) 进行多路复用。