1. System V IPC机制概述
System V IPC(Inter-Process Communication)是Unix/Linux系统中经典的进程间通信机制,主要包括共享内存、消息队列和信号量三种方式。这些机制都使用key_t类型的键值来标识资源,使得不同进程能够访问同一份IPC资源。
在实际开发中,我们经常需要多个进程协同工作。比如一个电商系统可能由订单处理、库存管理、支付服务等多个独立进程组成,它们之间需要高效地交换数据和协调工作。System V IPC正是为解决这类问题而设计的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 共享内存:最快的IPC方式
2.1 共享内存核心函数
共享内存允许两个或多个进程共享同一块物理内存区域,是最快的IPC方式,因为它避免了数据在用户空间和内核空间之间的复制。
2.1.1 shmget - 创建/获取共享内存
c复制int shmget(key_t key, size_t size, int shmflg);
- key:共享内存的唯一标识符,通常使用ftok()生成
- size:共享内存段的大小(字节)
- shmflg:权限标志,常用组合:
- IPC_CREAT:不存在则创建
- IPC_EXCL:与IPC_CREAT一起使用,确保创建新的共享内存
- 权限位:如0666(八进制)
提示:使用IPC_EXCL可以防止意外获取到已存在的共享内存,在需要严格创建新共享内存时特别有用。
2.1.2 shmat - 连接共享内存
c复制void *shmat(int shmid, const void *shmaddr, int shmflg);
- shmid:shmget返回的标识符
- shmaddr:建议的连接地址,通常设为NULL让系统自动选择
- shmflg:
- SHM_RDONLY:只读方式连接
- 0:读写方式连接
返回值是指向共享内存首地址的指针,进程可以通过这个指针直接读写共享内存。
2.1.3 shmdt - 分离共享内存
c复制int shmdt(const void *shmaddr);
分离共享内存并不会删除它,只是断开当前进程与共享内存的连接。分离后进程不能再通过之前的指针访
