在《15.6 open服务器第2版》中,第1 5 . 4节介绍了如何通过调用fork
和exec
来构造一个open
服务器,从而实现从子程序向父程序传送文件描述符的功能。而本节将进一步开发一个精灵进程风格的open
服务器,该服务器将处理所有客户机的请求,期望通过避免使用fork
和exec
来提高效率。
在客户机和服务器之间,仍然会使用上一节中提到的三个函数:serv_listen
、serv_accept
和cli_conn
。这一次,服务器将展示如何使用在1 2 . 5节中介绍的select
和poll
函数来处理多个客户机的请求。这些函数的深入使用可以参考以下资源:线程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
而非fork
和exec
,所以文件open.c
与程序1 5 - 1 3完全不同。这些差异可以在使用poll函数的客户服务器程序中找到详细说明。
暂无评论