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

最新文章

  1. C/C++ 双精度double 数据相加出错缺陷解释
  2. PHP服务器配置环境变量
  3. 【转】Kylin的cube模型
  4. 日历js插件
  5. reporting service & wpf
  6. 免杀ASP一句话
  7. 创建一个提供数据 API 的 Node.js 网站
  8. JVM调优总结 -Xms -Xmx -Xmn -Xss(转载)
  9. 转:SRIO错误侦测和管理机制
  10. Mac下Qt连接MySQL 驱动问题
  11. LeeCode-Spiral Matrix II
  12. 谈谈在DevOps实践中,感觉最重要的这三个技术……
  13. 极极极极极简的的增删查改(CRUD)解决方案
  14. 什么是WAL?
  15. jsonp实现跨域资源共享原理
  16. 【SQL触发器】类型 FOR 、AFTER、 Instead of
  17. 盘点一下Github上开源的Java面试/学习相关的仓库,看完弄懂薪资至少增加10k
  18. opencv对手写数字进行无黏连切割
  19. Java中创建只读容器,同步容器
  20. Gitlab安装和使用

热门文章

  1. Cobalt Strike
  2. 负载均衡server load balancer
  3. CGI/FASTCGI/ISAPI区别
  4. BIG5编码表
  5. Java之数组array和集合list、set、map
  6. 使用ANT打包Android应用
  7. poj1925Spiderman(dp)
  8. DataTable导出到Excel(.NET 4.0)
  9. php discuz框架接口不能正常访问的问题
  10. UDP编程(八)