在sendmsg()与recvmsg()间传递FD值。

本文介绍了如何在4.3BSD Reno系统中通过send_fd和recv_fd函数利用sendmsg()和recvmsg()在进程间传递文件描述符。send_fd函数设置控制消息头(cmsghdr)来发送文件描述符,而recv_fd函数则接收并解析这些控制消息以获取文件描述符。
摘要由CSDN通过智能技术生成

这是一篇好的文章,给与我的工作很大的帮助。

从4.3BSDReno开始,更改了msghdr结构的定义。在以前版本中被称之为存取权的最后两个元素改称为辅助数据。另外,在该结构结束处增加了一个新成员msg_flags。

strcut msghdr {
caddr_t msg_name; 可选的地址
int msg_namelen; 地址长度
struct iovec msg_iov; 散布/聚集数组
int msg_iovlen; 在msg_iov数组中的元素数
caddr_t msg_control; 辅助数据
int msg-controllen; 辅助数据的长度
int msg_flags; 接收到消息的标志
}

现在,msg_control字段指向一个cmsghdr(控制消息头)结构。

struct cmsghdr {
u_int cmsg_len; 数据的字节数,包括头
int cmsg_level; 初始的协议
int cmsg_type; 协议细节的类型下接真正的控制消息数据
}

  为了发送一文件描述符,将cmsg_len设置为cmsghdr结构长度加一个整型(描述符 )的长度。将cmsg_level设置为SOL_SOCKET,cmsg_type设置为

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值