在 Linux 操作系统中实现内部进程通信
Linux 给我们提供了丰富的内部进程通信机制,包括共享内存、内存映射文件、先入
先出(FIFO)、接口(sockets)以及多种用于同步的标识。在本文中主要讨论一下共享
内存和内存映射文件技术。
一般来说,内部进程通信(interprocess communication)也就是 IPC,是指两个
或两个以上进程以及两个或者两个以上线程之间进行通信联系。每个 IPC 机制都有不同的
强项或者弱点, 不过没有一个 IPC 机制包含内建的同步方法。因此程序员不但需要自己在
程序中实现同步,而且还需要为了利用 IPC 机制而自己开发通信协议。
共享内存
使用共享内存和使用 malloc 来分配内存区域很相似。使用共享内存的方法是:
1.对一个进程/线程使用 shmget 分配内存区域。
2.使用 shmat 放置一个或多个进程/线程在共享内存中,你也可以用 shmctl 来获取
信息或者控制共享区域。
3.使用 shmdt 从共享区域中分离。
4.使用 shmctl 解除分配空间
下面是个例子:
//建立共享内存区域
intshared_id;
char *region;
const intshm_size = 1024;
shared_id = shmget(IPC_PRIVATE,//保证使用唯一 ID
shm_size,
IPC_CREAT | IPC_EXCL |//创建一个
新的内存区域
S_IRUSR | S_IWUSR);//使当前用户
可以读写这个区域
//交叉进程或生成进程.
//将新建的内存区域放入进程/线程
region = (char*) shmat(segment_id, 0, 0);
//其他程序代码