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

How to use Shared Memory between two separate applications in C

经过研究,没有很好的堆栈溢出 post 关于如何在 C++ 中的两个独立应用程序之间共享内存,随代码一起提供。

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

但它需要分叉一个进程,以便内存 mmap 到同一位置。它不适用于两个单独的应用程序。

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

这是我使用 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;
}