如何在 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;
}
经过研究,没有很好的堆栈溢出 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;
}