Linux 提供多种 IPC 机制:**命名管道(FIFO)**基于内核缓冲区,适合小消息流式传输;**POSIX 共享内存(shm_open + mmap)**让多个进程映射同一物理页,零拷贝传递大数据,但需自行实现同步(如信号量)。
一、POSIX 共享内存 + 信号量同步示例
c
#include <fcntl.h>
#include <sys/mman.h>
#include <semaphore.h>
typedef struct {
sem_t lock;
char payload[4096];
} SharedBuf;
int fd = shm_open("/ipc_demo", O_CREAT | O_RDWR, 0600);
ftruncate(fd, sizeof(SharedBuf));
SharedBuf *buf = mmap(NULL, sizeof(SharedBuf), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
sem_init(&buf->lock, 1, 1); // pshared=1,跨进程共享
// 写入端
sem_wait(&buf->lock);
strncpy(buf->payload, "hello from writer", sizeof(buf->payload) - 1);
sem_post(&buf->lock);
// 读取端映射同一名字对象后即可零拷贝读取