APUE读书笔记-第17章-高级进程间通信

17.1 引言

*两种高级IPC:基于STREAMS的管道(STREAMS-based pipe)以及UNIX域套接字(UNIX domain socket)可以在进程间传送打开文件描述符。服务进程可以使它们的打开文件描述符与指定的名字相关联,客户进程可以使用这些名字与服务进程通信


17.2 基于STREAMS的管道

*可以用fattach函数给STREAMS管道一个文件系统中的名字

*一旦STREAMS管道连接到文件系统名字空间,那么原来该名字的底层文件就不再可访问的。打开改名字的任一进程将能访问相应管道,而不是访问原先的文件。在调用fattach之前打开底层文件的任一进程可以继续访问该文件

*虽然fattach函数可将任何种类的STREAMS文件描述符与文件系统中的一个名字相连接,但它最主要用于将一个名字给予一STREAMS管道

*在调用fdetach函数之后,先前依靠打开path而能访问STREAMS管道的进程仍可继续访问该管道,但是在此之后打开path的进程将访问驻留在文件系统中的底层文件


17.3 UNIX域套接字

*UNIX域套接字用于在同一台机器上运行的进程之间的通信

*UNIX域套接字提供流和数据包两种接口

*当我们将一地址绑定至UNIX域套接字时,系统用该路径名创建一类型为S_IFSOCK的文件。该文件仅用于向客户进程告知套接字名字。该文件不能打开,也不能由应用程序用于通信。如果当我们试图绑定地址时,该文件已经存在,那么bind请求失败。当关闭套接字时,并不自动删除该文件,所以我们必须确保在应用程序终止前,对该文件执行解除链接操作


17.4 传送文件描述符

*当一个进程(通常是服务器进程)希望将一个描述符传送给另一个进程时,它调用send_fd或send_err,等待接收描述符的进程(客户进程)调用recv_fd


17.5 open服务器版本1

*使用文件描述符传送技术,我们开发了一个open服务器:一个由一个进程执行以打开一个或几个文件的程序。该服务器不是将文件内容送回调用进程,而是送回一个打开文件描述符。这使该服务器对任何类型的文件(例如一个设备或套接字)而不单是普通文件都能起作用。这也意味着,用IPC交换了最小量的信息——从客户进程到服务器进程传送文件名和打开模式,而从服务器进程到客户进程返回描述符。文件内容不需用IPC传送


17.6 open服务器版本2

*open服务器版本2是一个以守护进程方式运行的open服务器。用一个服务器进程处理所以客户进程的请求。这一设计应该更加有效,因为没有使用fork和exec



 

你可能感兴趣的:(读书笔记)