參考資訊:
https://stackoverflow.com/questions/22721209/sharing-memory-between-processes-on-linux
server.c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
#define SHM_NAME "SHM"
#define SHM_BUF_SIZE 4096
int main(int argc, char *argv[])
{
int fd = -1;
char *buf = NULL;
fd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0777);
ftruncate(fd, SHM_BUF_SIZE);
buf = mmap(NULL, SHM_BUF_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
buf[0] = 0;
usleep(3000000);
printf("%s\n", buf);
munmap(buf, SHM_BUF_SIZE);
shm_unlink(SHM_NAME);
return 0;
}
client.c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/mman.h>
#define SHM_NAME "SHM"
#define SHM_BUF_SIZE 4096
int main(int argc, char *argv[])
{
int fd = -1;
char *buf = NULL;
fd = shm_open(SHM_NAME, O_RDWR, 0777);
buf = mmap(NULL, SHM_BUF_SIZE, PROT_WRITE, MAP_SHARED, fd, 0);
strcpy(buf, "I am error !");
munmap(buf, SHM_BUF_SIZE);
shm_unlink(SHM_NAME);
return 0;
}
編譯、執行
$ gcc client.c -o client
$ gcc server.c -o server
$ ./server&
$ sleep 1
$ ./client
I am error !