Linux文件共享(六)——描述符传递

简介:

注:转载请注明出处   作者:lvyilong316

5.1 进程间描述符传递

首先,我们先来讨论一个问题——进程间传递文件描述符究竟传递的是什么?

我们从传递描述符函数的参数来看是个fd,我们知道fd是打开文件指针的在数组中的下标,是一个整数,那么我们仅仅是把一个整数传递给另一个进程吗?答案肯定是否定的,因为仅仅是传递整数值,没有必要专门去实现一个api。至于深层次的的原因,我们可以想一下,假如接受进程仅仅收到的是一个整数值,他能知道什么,又能做什么呢?即使它知道这是来自另一个进程的一个打开文件指针的下标,可是它还是不能知道这个下标在另一个进程中对应的是哪个打开文件,其次,这个下标对接收进程本身毫无意义,因为在接受进程中这个下标(fd)可能已经被其他打开文件占用。

我们又知道当我们将一个文件描述符传递给另一个进程后,文件的“访问计数”会增加,这和什么有点像?没错,dup对于进程间传递文件描述符我们可以看作跨进程的dup调用,也就是同一个file对象在不同进程间的映射,这和两个进程打开同一个文件的结果相同,只是接受文件描述符的进程少了open的步骤而已,而对于网络接口返回的描述符,也只能采取传递文件描述符的方法。unix 系统中有两个办法来完成这个任务:
BSD   sendmsg, recvmsg 方法
SYSV  ioctl 方法

     当一个进程向另一个进程传送一打开的文件描述符时,我们想要发送进程和接收进程共享同一文件表项。下图显示了所希望的安排。

 

总结:进程间文件描述符的传递,只是通过内核将接收文件的一个新的file指针指向和发送进程的同一个file对象,并使这个file对象的引用计数增加。

5.2 线程间描述符传递

通过上一节分析线程间文件共享,我们可以知道每个线程的同一个file指针下标,对应同一个file对象,同一个文件在一个线程中是什么状态,在另一个线程(同一进程中)也是什么状态。所以线程间不需要传递文件描述符,或者说仅仅通过fd值的传递即可达到传递描述符的效果(内核无需干预)。

 

Linux文件共享总结:共享程度:

1.线程共享(共享files_struct结构)

2.进程间描述符传递、dup、父子进程共享打开文件(共享file对象)

3.两独立进程打开同一文件(共享dentry


目录
相关文章
|
19天前
|
Linux
Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
64 2
|
20天前
|
Linux 数据安全/隐私保护 Windows
Linux共享Windows目录
Linux共享Windows目录
|
25天前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
20天前
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
26 1
Linux 服务器下载百度网盘文件
|
24天前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
13天前
|
Ubuntu Linux Shell
Linux系统命令 安装和文件相关命令
本文档详细介绍了Linux系统中的常用命令,包括软件安装卸载命令如`dpkg`和`apt-get`,压缩与解压命令如`gzip`、`bzip2`和`xz`,以及`tar`命令用于打包和解包。此外还介绍了文件分割命令`split`,文件操作命令如`cat`、`head`、`tail`、`more`、`less`等,管道命令和`wc`、`grep`、`find`、`cut`、`sort`、`uniq`、`diff`等实用工具。最后,文档还讲解了文件属性相关的命令如`chmod`、`chown`、`chgrp`以及创建硬链接和软链接的`ln`命令。
|
22天前
|
Linux
linux 删除乱码文件名的文件
【8月更文挑战第26天】当遇到文件名显示为乱码,导致无法正常通过键盘输入文件名进行删除操作时,可以利用鼠标的复制功能配合`rm`命令实现删除。对于文件夹的删除,可使用`rm -rf 目录名`。然而,有时这种方式仍无法删除某些特殊乱码文件,这时可以通过获取文件的i节点号(使用`ls -i`或`ll -i`命令查看)并执行`find -inum [节点号] -delete`来进行删除。这种方法特别适用于处理那些因文件名问题而难以删除的情况。
67 2
|
23天前
|
JSON Linux 网络安全
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
|
25天前
|
机器学习/深度学习 Ubuntu Linux
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
|
25天前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?