socketpair
1 定义socketpair 是一个 POSIX 标准系统调用 用于创建一对相互连接的、匿名的 本地套接字 它声明在 sys/socket.h 头文件中 它广泛应用于进程间通信IPC 尤其在父子进程需要全双工数据交换时非常实用。#includesys/socket.hintsocketpair(intdomain,inttype,intprotocol,intsv[2]);该函数成功时返回 0失败时返回 -1 并设置 errno2 参数详解domain 通信域。 POSIX 规定只能为 AF_UNIX或别名 AF_LOCAL表示仅限于本机进程间通信。type 套接字类型。常用 • SOCK_STREAM可靠双向字节流类似 TCP不保留消息边界 • SOCK_DGRAM无连接数据报类似 UDP保留消息边界protocol 协议号。对 AF_UNIX 通常填 0表示使用默认协议。sv[2] 输出参数。 成功时 sv[0] 和 sv[1] 会被赋值为两个已相互连接的文件描述符。 两者无区别、完全对称3 作用1. 创建全双工通信通道 socketpair 创建的两个套接字是对称的向 sv[0] 写入的数据可以从 sv[1] 读取反之亦然。 这意味着它提供了一个全双工full-duplex通信通道两端都可以同时进行读写操作。 2. 用于进程间通信IPC socketpair 最常见的用途是实现父子进程之间的双向通信。 调用 fork() 后子进程会继承父进程打开的文件描述符 因此父子进程可以各自保留套接字对的一端进行通信。4 工作机制2 个文件描述符都在内核中有各自接收队列 向sv[0] 写入数据会把数据包装成一个sk_buff结构体 这个结构体会作为一个链表节点被添加 sv[1] 的 接收队列 sv[1]读数据时会从接收队列的头节点中得到数据地址 然后将数据从内核 copy 到用户程序内存中