mmap程序間通訊
阿新 • • 發佈:2020-08-24
mmap程序間通訊
寫端
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> // 資料結構體 typedef struct { int pid; char Msg[20]; }DATA_T; int main(void) { /* 開啟對映檔案 */ int fd = open("mapfiles", O_RDWR); /* 擴充套件空檔案 */ ftruncate(fd, sizeof(DATA_T)); /* 進行共享對映, 建立對映記憶體 */ DATA_T * p = mmap(NULL, sizeof(DATA_T), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); close(fd); /* 向對映記憶體中持續寫入 */ bzero(p, sizeof(DATA_T)); p->pid = getpid();int i = 0; while (1) { sprintf(p->Msg, "%d:pid:%d\n", i, p->pid); i++; } return 0; }
讀端
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<sys/mman.h> // 資料結構體 typedef struct { int pid; char Msg[20]; }DATA_T; int main(void) { /* 開啟對映檔案 */ int fd = open("mapfiles", O_RDWR); /* 進行共享對映, 建立對映記憶體 */ DATA_T * p = mmap(NULL, sizeof(DATA_T), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); close(fd); while (1) { printf("%s", p->Msg); } return 0; }