UNIX系统中的进程间通信详解
1. 进程间通信概述
在UNIX系统里,进程间通信(IPC)机制能让两个或更多不同的进程相互交流。之前提到过一种IPC形式——管道,它允许两个相关进程(其中一个必须是另一个的子进程)通过读写系统调用,在双向字节流上进行通信。
较新的UNIX版本(如从4.2BSD开始的伯克利版本和System V)提供了更强大的IPC功能,能让两个或更多完全不相关的进程相互通信。System V提供了三种独立的IPC形式:信号量、共享内存和消息队列。不过,这些机制虽然在各自领域功能强大,但在使用类型上有一定限制。而伯克利UNIX的套接字方法,为大多数UNIX程序员熟悉的管道机制提供了一个通用接口,实际上,管道机制在伯克利UNIX中就是通过一对连接的套接字实现的。
2. 伯克利UNIX IPC
超出管道机制范围的进程间通信通常可以用客户端/服务器模型来描述。在这个模型中,一个进程被称为服务器,负责满足另一个进程(客户端)提出的请求。例如,管理机器上所有打印机队列的程序就是服务器。当用户打印文件时,打印程序(客户端)会联系服务器,请求将文件放入指定打印机的队列中,服务器完成此操作后,会调用相应程序在打印机上实际打印文件。
服务器程序启动时,会向操作系统请求一个套接字。获得套接字后,会给它分配一个知名名称,这样其他程序就可以通过这个名称与服务器通信。命名套接字后,服务器会监听该套接字,等待客户端进程的连接请求。当连接请求到达时,服务器可以接受或拒绝连接。如果接受连接,操作系统会在套接字处将客户端和服务器连接起来,服务器就可以像使用管道一样,通过套接字与客户端读写数据。
客户端首先向操作系统请求一个套接字,然后
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



