如何在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中制作共享内存?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python和C / C ++中使用共享内存

C中的基本共享内存程序

如何在 C 中与 Linux 一起使用共享内存

如何将结构分配给共享内存i c ++?

在 C/C++ 共享内存中等待和通知

如何在 c 中使用 posix 命名信号量和 Linux 上两个进程之间的共享内存?