socket --- 网络编程 UNIX域 传送文件描述符

文章介绍了如何通过文件描述符实现在多进程中同步操作同一文件,重点讲述了传输文件描述符的基本原理,涉及到PCB结构体、文件指针和UNIX域(AF_LOCAL或AF_UNIX)的使用。并提供了一个服务器与子进程(视为客户端)之间通过UNIX域协议交换文件描述符的案例。
摘要由CSDN通过智能技术生成

一、传送文件描述符的基本概念

在系统中,进程间同步或者互斥原子性操作同一个文件时除了指定文件的路径之后,其实可以通过传送文件的文件描述符来实现
多进程操控通过一个文件,进行系统工业控制。
服务器通常利用该功能把传输文件描述符给子进程进行操作文件的一系列工作。

二、传输文件描述符的基本原理

其实传输文件描述符并不只是当当发送文件的描述符(也就是一个普通的句柄编号),这样是不行的,而且不同进程间的内存是相对
独立的单纯发送文件描述符是没有用的。其实在一个进程打开一个文件时,除了获取到了文件描述符之外,每一个进程都有自己的PCB
结构体,存放这自己打开的文件描述符的列表,其中每一个文件描述符都有自己对应的文件指针,而我们这里传输就是指向这个文件
的内存指针,当其他进程获取到了这个指针的时候也能对这个文件进程操作。这个指针即是指向实际文件在内存中的文件表。
如下图所示:

文件描述符传输的原理图:

在这里插入图片描述


三、案例实现思路

需要写两个示例程序,服务器和子进程(可以把它当初客户端),使用UNIX的本地主机网络协议(即UNIX域)进行连接传输,
本思路使用TCP传输层协议为例子。

服务器:
    创建UNXI域类型的socket,UNXI域类型即称为:AF_LOCAL 或者 AF_UNIX
    
    绑定套接字
    
    监听套接字
    
    等待子程序(客户端)连接
    
    打开指定文件
    发送文件的套接字
    在文件中写入 service:fd send success\n
    等待子程序接受完成后,sleep(4)关闭文件
    
    关闭套接字
    
子程序(客户端)
    创建UNXI域类型的socket,UNXI域类型即称为:AF_LOCAL 或者 AF_UNIX
    
    连接服务器
    
    接受服务器发送过来的文件描述符
    
    接受完成之后,打开文件描述符对应的指定的文件,往指定的文件写入 client:recv fd success\n
    
    发送flish给服务器
    
    sleep(1)关闭文件
    
    关闭套接字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值