UNIX系统下C语言的进程间通信详解
1. 进程间通信概述
在UNIX系统中,进程间通信(IPC)是非常重要的功能。System V IPC有三种不同的形式:消息队列、信号量和共享内存。虽然它们不如Berkeley UNIX方法简单和通用,但各自都有其适用场景。
这三种形式有一些共同的特点:
- 都使用key_t类型的键来引用特定的数据结构。键是一个长整型整数,用于命名要使用的特定数据结构,以便多个程序可以引用它。
- 每个IPC形式都有与之关联的权限结构。该权限集包括机制的用户和组所有权,以及类似于文件权限的权限,指定谁(所有者、组、其他用户)可以读取和/或写入(修改)该机制。可以通过调用控制函数来获取和修改特定机制的权限。
- 每种IPC形式都提供了各种操作函数,以便使用IPC机制。
2. 消息队列
2.1 消息队列简介
消息队列是虚拟电路和数据报的混合体。进程之间使用队列机制交换不同的消息“包”,以确保数据按顺序到达,但消息可以由接收进程以或多或少任意的顺序接收。
消息队列由一个唯一的标识符(队列ID,通常是一个长整型整数)定义。队列本身由sys/msg.h中包含的以下结构描述(同时需要包含sys/types.h):
struct msqid_ds { struct ipc_perm msg_perm; /* permissions */ struct msg *msg_first;