首页 > 编程知识 正文

linux查看文件描述符,addactionlistener方法

时间:2023-05-06 06:31:14 阅读:170674 作者:1419

11.1.4传递文件描述符

经常需要在进程之间传递文件描述符。 例如,如果某个设备在上电过程中只打开一次,然后关闭再重新打开,则会出现错误。 在这种情况下,需要调度器来调度多个相同的设备。 如果客户端需要这种类型的设备,则会发送请求,服务器会将设备描述符发送到客户端。 但是,由于不同进程之间的文件描述符所表示的对象不同,因此需要特殊的机制来实现上述要求。

Linux系统提供了一种将打开的文件描述符从一个进程传递到任何其他进程的特殊方法。 基本流程如下

)1)创建字节流或数据报的UNIX域套接字。

目标为fork ) )在子程序中,如果子程序打开描述符并将其返回给父进程,则父进程可以使用(socketpair ) )创建传递描述符的流管道。

如果进程之间没有父子关系,则服务器必须创建UNIX域字节流套接字,并绑定路径名,以便客户端可以连接到该套接字。 然后,客户端可以向服务器发送请求以打开描述符。 服务器通过UNIX域套接字返回描述符。 虽然可以在客户端和服务器之间使用UNIX数据报套接字,但这没有任何好处,而且可能会丢失数据报。

)2)进程可以在返回描述符的UNIX函数中打开描述符。 例如,open (、pipe )、mkfifo (套接字)或accept (大写字母)。 可以在进程之间传递任何类型的描述符。

(3)发送过程构建包含要传递的描述符的msghdr结构。 虽然POSIX描述了将此描述符作为辅助数据发送,但在旧实现中使用msg_accright成员。 发送过程调用在sendmsg(**部得到的UNIX域套接字,发行套接字。 此描述符正在飞行。 即使发送进程调用了sendmsg () ),描述符也会在接受进程调用recvmsg ) )之前关闭,并为接收进程保持打开状态。 发送描述符会将访问统计加1。

(4)接收进程调用recvmsg )在UNIX域套接字上接收套接字。 通常,接收进程接收的描述符编号与发送进程的描述符编号不同,但这没有问题。 事务描述符在接收进程中创建新描述符,该描述符指向内核文件表中与发送进程发送的描述符相同的条目,而不是事务描述符的编号。

【责任编辑:强西牛tel:(010 ) 68476606】

点赞0

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。