UNIX 域属性
本节描述 UNIX 域的属性。
UNIX 域的特征包括:
| 项 | 描述 |
|---|---|
| 套接字类型 | 在 UNIX 域中, SOCK_STREAM 套接字类型提供类似管道的工具,而 SOCK_DGRAM 和 SOCK_SEQPACKET 套接字类型通常提供可靠的消息样式通信。 |
| 命名 | 套接字名称是字符串,通过门户网站显示在文件系统名称空间中。 |
传递文件描述符
在 UNIX 系统中,可以通过以下几种方式在进程之间传递打开的文件:
- 通过在父代中打开父代到子代,然后派生或执行另一个进程,从父代到子代。 这有明显的缺点。
- 在使用 UNIX 域套接字的任何进程之间,如下所述。 这是一种比较一般的技术。
将文件描述符从一个进程传递到另一个进程意味着在发送进程中获取打开的文件,并在接收进程中生成另一个指向文件表项的指针。 要将文件描述符从任何任意进程传递到另一个进程,这些进程必须与 UNIX 域套接字 (其系列类型为 AF_UNIX的套接字) 连接。 此后,可以使用 sendmsg () 系统调用将描述符从发送进程传递到接收进程,该进程必须执行 recvmsg () 系统调用。 这两个系统调用是唯一支持 "访问权" 概念的系统调用,即如何传递描述符。
基本上, 访问权
表示拥有进程已通过打开相应系统资源来获取相应系统资源的权限。 然后,此进程 (发送进程) 将此权限传递给使用上述系统调用的接收进程。 通常,文件描述符通过访问权机制传递。
sys/socket.h 中的 msghdr 结构包含以下字段:
| 项 | 描述 |
|---|---|
| caddr_t 消息访问权限 | 访问权发送/接收 |
文件描述符通过消息头的此字段传递,该消息头用作相应 sendmsg () 系统调用中的参数。