如何在C中两个单独的应用程序之间使用共享内存

时间:2019-03-14 19:28:15

标签: c linux shared-memory mmap

进行了研究之后,关于如何在C ++中的两个独立应用程序之间共享内存的问题,并没有很好的堆栈溢出文章。

可以在这里找到一种解决方案:How to use shared memory with Linux in C

但这需要分叉一个过程,以便将存储器mmap移到同一位置。它不适用于两个单独的应用程序。

编写两个使用内存空间共享数据的应用程序的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

这是我使用过时的shmget解决方案,但是可以使用

主机:

#include <sys/ipc.h>
#include <sys/shm.h>

int main()
{
    char output[] = "test";
    int shmid=shmget(IPC_PRIVATE, sizeof(output), 0666);
    FILE *fp;
    fp = fopen("/tmp/shmid.txt", "w+");
    fprintf(fp, "%d", shmid);
    fclose(fp);
    int *mem_arr;

    while(true)
    {
        mem_arr = (int *)shmat(shmid, NULL, 0);
        memcpy(mem_arr, output, sizeof(output));
        shmdt(mem_arr);
    }
    return 1;
}

客户:

#include <sys/ipc.h>
#include <sys/shm.h>

int main()
{
    char output[] = "test";
    FILE *fp;
    fp = fopen("/tmp/shmid.txt", "r");
    int shmid;
    fscanf (fp, "%d", &shmid);  
    fprintf(fp, "%d", shmid);
    fclose(fp);

    while(true)
    {
        int* shared_mem = (int *)shmat(shmid, NULL, 0);
        printf("data: %s\n", shared_mem);
    }
    return 1;
}