在《15.6 open服务器第2版》中,第1 5 . 4节介绍了如何通过调用forkexec来构造一个open服务器,从而实现从子程序向父程序传送文件描述符的功能。而本节将进一步开发一个精灵进程风格的open服务器,该服务器将处理所有客户机的请求,期望通过避免使用forkexec来提高效率。

在客户机和服务器之间,仍然会使用上一节中提到的三个函数:serv_listenserv_acceptcli_conn。这一次,服务器将展示如何使用在1 2 . 5节中介绍的selectpoll函数来处理多个客户机的请求。这些函数的深入使用可以参考以下资源:线程poll函数Linux poll函数深入理解,这两个链接提供了详细的技术解析。

与第1 5 . 4节中的客户机类似,本节所述的客户机在很多方面是相似的。事实上,文件main.c完全相同(见程序1 5 - 1 2)。在open.h头文件中(见程序1 5 - 11),我们仅添加了以下一行:


#define CS_OPEN "/home/stevens/open" /* server's well-known name */

由于我们在这里调用的是cli_conn而非forkexec,所以文件open.c与程序1 5 - 1 3完全不同。这些差异可以在使用poll函数的客户服务器程序中找到详细说明。