15.3 传送文件描述符在进程间传送打开文件描述符的能力非常有用。用此可以对客户机/服务器应用进行不同的设计。它允许一个进程(一般是服务器)处理与打开一个文件有关的所有操作(涉及的细节可能是:将网络名翻译为网络地址、拨号调制解调器、协商文件锁等。)以及向调用进程返回一描述符,该描述符可被用于以后的所有 I/O 函数。打开文件或设备的所有细节对客户而言都是透明的。4.2BSD 支持传送打开描述符,但其实施中有些错误。4.3BSD 排除了这些错误。SVR3.2 及以上版本都支持传送打开描述符。
想要更详细地了解这些内容吗?可以看看这篇关于Unix进程与进程通信的文章,或者深入了解Unix网络编程卷2进程通信的细节。
下面进一步说明“从一个进程向另一个进程传送一打开文件描述符”的含义。回忆图 3-2,其中显示了两个进程,它们打开了同一文件。虽然它们共享同一 v 节点表,但每个进程都有它自己的文件表项。当从一个进程向另一个进程传送一打开文件描述符时,我们想要发送进程和接收进程共享同一文件表项。图 15-4 显示了所希望的安排。在技术上,发送进程实际上向接受进程传送一个指向一打开文件表项的指针。该指针被分配存放在接收进程的第一个可用描述符项中。(注意,不要得到错觉以为发送进程和接收进程中的描述符编号是相同的,通常它们是不同的。)这种情况与在 fork 之后,父、子进程完全共享一个打开文件表项相同(见图 8-1)。当发送进程将描述符传送给接收进程后,通常它关闭该描述符。发送进程关闭该描述符并不造成关闭该文件或设备,其原因是该描述符对应的文件仍需为接收进程打开(即使接收进程尚未接收到该描述符)。
感兴趣的读者可以阅读更多关于Unix进程间通信的内容,或浏览关于UNIX进程通信的详细介绍。这样就可以更好地理解进程间文件描述符传送的概念和实现方法。
这些资源将帮助你更深入地了解进程间通信和文件描述符传送的细节,让你的编程实践更加高效和专业!
暂无评论