1. 程式人生 > 實用技巧 >mmap程序間通訊

mmap程序間通訊

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; }