第十七章 高级进程间通信
17.2 UNIX域套接字
用于在同一台计算机上运行的进程间通信。像是套接字和管道的组合
使用 socketpair
函数创建一对无命名的、相互连接的UNIX域套接字
1 |
|

一对相互连接的UNIX域套接字可以起到全双工管道的作用,两端都对读和写开放
命名UNIX域套接字
就像网络域套接字一样,可以把一个地址绑定到UNIX域套接字上。
UNIX域套接字地址由 sockaddr_un
结构表示
Linux 和 Solaris 实现
1 | struct sockaddr_un { |
FreeBSD 和 Mac OS 实现
1 | struct sockaddr_un { |
绑定地址的时候,系统会使用 sun_path
指定的路径名创建一个文件,如果该文件已经存在,则 bind
请求失败
还要注意的是关闭套接字的时候并不自动删除该文件,所以要在程序退出前对该文件执行解除链接 的操作
17.3 唯一连接
开发3个函数,在同一台计算机上的两个无关进程之间建立唯一连接
1 |
|
serv_listen
函数的 name
参数声明了服务器将在这个文件上监听客户的连接请求,此函数的返回值是用于接收客户连接请求的服务器UNIX域套接字
服务器进程使用 serv_accept
函数等待客户进程连接请求的到达。当客户请求到达时,服务器自动创建一个新的UNIX域套接字并将它与客户端套接字相连
客户进程使用 cli_conn
函数连接至服务器进程,name
参数就是 调用 serv_listen
是指定的 name
,此函数返回值是连接到服务器进程的文件描述符
三个函数的实现: