如何在c中制作共享内存?
Posted
技术标签:
【中文标题】如何在c中制作共享内存?【英文标题】:How to make shared memory in c? 【发布时间】:2022-01-02 06:56:23 【问题描述】:如何在c中的应用程序之间共享数据?
我使用了一个临时文件作为永久存储。客户端输入数据,服务器可以读取它。这样做的目的是使添加任意数量的客户端成为可能。这纯粹是一个研究问题,与现实世界的问题没有直接关系。
有没有更好的方法在应用程序之间共享数据?
ipc.h(程序间通信.h)
#ifndef IPC /* Include guard */
#define IPC
void write_message(int ID);
void read_message();
#endif
client.c
#include <stdlib.h>
#include <stdio.h>
#include "ipc.h"
int main()
int ID;
while(1)
printf("Please enter ID: ");
scanf("%d", &ID);
write_message(ID);
return 0;
服务器.c
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include "ipc.h"
int main()
while(1)
read_message();
Sleep(100);
return 0;
ipc.c(包含 ipc.h 中描述的功能)
#include <stdlib.h>
#include <stdio.h>
#include "ipc.h"
void write_message(int ID)
FILE * fp;
fp = fopen("temp.txt", "w");
if(fp == NULL)
printf("Error!");
exit(1);
fprintf(fp, "ID\t:\t%d\n", ID);
fclose(fp);
void read_message()
FILE * fp;
char c;
fp = fopen("temp.txt", "r");
if(fp == NULL)
exit(1);
while ((c = getc(fp)) != EOF)
printf("%c", c);
fclose(fp);
【问题讨论】:
欢迎来到 Stack Overflow。在发布问题之前,预计已经完成了基础研究。例如,您是否在您最喜欢的搜索引擎中输入了“C 共享内存”或“C 进程间通信”? 【参考方案1】:客户端-服务器是一种方法。您没有指定操作系统,但如果您使用的是 Windows,则可以创建可由多个进程访问的共享内存页面。
您使用具有 PAGE_READWRITE 访问权限的函数CreateFileMapping 来创建将要共享的文件对象。然后你需要使用MapViewOfFile 将其映射到内存中,它返回进程共享的缓冲区。第二个过程使用 CreateFileMapping 中提供的相同名称执行相同的步骤。
两个进程现在都可以读取和写入该缓冲区。
【讨论】:
以上是关于如何在c中制作共享内存?的主要内容,如果未能解决你的问题,请参考以下文章