【问题标题】:How to make shared memory in c?如何在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 进程间通信”?

标签: c windows shared-memory


【解决方案1】:

客户端-服务器是一种方法。您没有指定操作系统,但如果您使用的是 Windows,则可以创建可由多个进程访问的共享内存页面。

您使用具有 PAGE_READWRITE 访问权限的函数CreateFileMapping 来创建将要共享的文件对象。然后你需要使用MapViewOfFile 将其映射到内存中,它返回进程共享的缓冲区。第二个过程使用 CreateFileMapping 中提供的相同名称执行相同的步骤。

两个进程现在都可以读取和写入该缓冲区。

【讨论】:

    猜你喜欢
    • 2014-03-22
    • 2010-11-28
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多