首页 > 系统相关 >Linux文件IO(八)-文件共享

Linux文件IO(八)-文件共享

时间:2024-09-22 09:50:37浏览次数:3  
标签:文件 同一个 多个 文件共享 描述符 IO Linux 进程

什么是文件共享?所谓文件共享指的是同一个文件(譬如磁盘上的同一个文件,对应同一个 inode)被多个独立的读写体同时进行 IO 操作。多个独立的读写体大家可以将其简单地理解为对应于同一个文件的多个不同的文件描述符,譬如多次打开同一个文件所得到的多个不同的 fd,或使用 dup()(或 dup2)函数复制得到的多个不同的 fd 等。同时进行 IO 操作指的是一个读写体操作文件尚未调用 close 关闭的情况下,另一个读写体去操作文件,

前面给大家编写的示例代码中就已经涉及到了文件共享的内容了,譬如 3.6 小节中编写的示例代码中,同一个文件对应两个不同的文件描述符 fd1 和 fd2,当使用 fd1 对文件进行写操作之后,并没有关闭 fd1,而此时使用 fd2 对文件再进行写操作,这其实就是一种文件共享。

文件共享的意义有很多,多用于多进程或多线程编程环境中,譬如我们可以通过文件共享的方式来实现多个线程同时操作同一个大文件,以减少文件读写时间、提升效率。

文件共享的核心是:如何制造出多个不同的文件描述符来指向同一个文件。其实方法在上面的内容中都已经给大家介绍过了,譬如多次调用 open 函数重复打开同一个文件得到多个不同的文件描述符、使用 dup()或 dup2()函数对文件描述符进行复制以得到多个不同的文件描述符。

常见的三种文件共享的实现方式

(1)同一个进程中多次调用 open 函数打开同一个文件,各数据结构之间的关系如下图所示:

这种情况非常简单,多次调用 open 函数打开同一个文件会得到多个不同的文件描述符,并且多个文件描述符对应多个不同的文件表,所有的文件表都索引到了同一个 inode 节点,也就是磁盘上的同一个文件。

(2)不同进程中分别使用 open 函数打开同一个文件,其数据结构关系图如下所示:

 

进程 1 和进程 2 分别是运行在 Linux 系统上两个独立的进程(理解为两个独立的程序),在他们各自的程序中分别调用 open 函数打开同一个文件,进程 1 对应的文件描述符为 fd1,进程 2 对应的文件描述符为fd2,fd1 指向了进程 1 的文件表 1,fd2 指向了进程 2 的文件表 2;各自的文件表都索引到了同一个 inode 节点,从而实现共享文件。

(3)同一个进程中通过 dup(dup2)函数对文件描述符进行复制,其数据结构关系如下图所示:

 

标签:文件,同一个,多个,文件共享,描述符,IO,Linux,进程
From: https://blog.csdn.net/qq_45398836/article/details/142417178

相关文章

  • axios允许跨域cookie
    //添加请求拦截器service.interceptors.request.use( (config)=>{ ////在发送请求之前做些什么token //if(Session.get('token')){ // (<any>config.headers).common['Authorization']=`${Session.get('token')}`; //} //获取本......
  • 如何使用 useTransition hook 提高 React 性能
    react是一个用于构建用户界面的流行javascript库。它以高效且专注于创建可重用的ui组件而闻名。react的关键特性之一是引入了钩子,它是挂钩到react状态的函数。这些钩子中的一个是usetransition钩子。该钩子允许在不阻塞界面的情况下进行状态更改,从而带来流畅的体验。......
  • 变化检测从 Angular zonejs) 到 Angular (provideExperimentalZonelessChangeDetectio
    更改检测是angular的一个基本方面,负责识别和更新dom中因数据修改或用户交互而发生更改的部分。此过程可确保ui与底层数据保持一致,从而增强用户体验和应用程序性能。zone.js的作用从历史上看,angular一直依赖zone.js来实现其变更检测机制。zone.js是一个拦截异步......
  • 【小沐学GIS】基于Openstreetmap创建Sionna RT场景(Python)
    文章目录1、简介1.1blender2、下载和安装2.1Python2.2jupyter3、运行结语1、简介1.1blenderhttps://www.blender.org/Blender是一款免费开源的3D创作套件。使用Blender,您可以创建3D可视化效果,例如静态图像、3D动画、VFX(视觉特效)快照和视频编辑。它非常适......
  • 【多变量输入单步预测】基于减法优化器算法(SABO)优化CNN-BiLSTM-Attention的风电功率
         ......
  • 使用 Remotion、Nextjs 和 Tailwind CSS 构建基于 Web 的视频编辑器
    如果您曾经想创建自己的强大的基于网络的视频编辑器(类似于veed.io或descript等流行工具),那么您来对地方了!在本分步指南中,我们将向您展示如何使用remotion、next.js和tailwindcss构建视频编辑器。最后,您将为开发自己的基于浏览器的视频编辑工具奠定坚实的基础。介绍......
  • The 2024 ICPC Asia EC Regionals Online Contest (II) - Problem H. Points Selectio
    注意到如果$\text{query}(a,b,c)$为真,那么$\text{query}(\geqa,\geqb,c)$一定为真。从小到大枚举询问中$a$的值,按横坐标从小到大依次加入每个点,维护$f_c$表示最小的$b$满足$\text{query}(a,b,c)$为真。假设当前正在加入点$(x,y,w)$,有$f_{(c+w)\bmodn}=\min(f_{......
  • The 2024 ICPC Asia EC Regionals Online Contest (II) - Problem B. Mountain Bookin
    从$1$到$m$依次考虑每个日期。假设当前正在考虑第$i$天,那么只有第$i$天来访的游客以及指定第$i$天的查询是有用的。将这些游客和查询都提取出来,通过Kruskal重构树可以很方便地在$O(n\logn)$的时间内计算出这些查询的答案。不幸的是,本题还有加边删边操作,无法轻易地......
  • A SURVEY ON FAIRNESS OF LARGE LANGUAGE MODELS IN E-COMMERCE: PROGRESS, APPLICATI
    本文是LLM系列文章,针对《ASURVEYONFAIRNESSOFLARGELANGUAGEMODELSINE-COMMERCE:PROGRESS,APPLICATION,ANDCHALLENGE》的翻译。电子商务中大型语言模型公平性的调查:进展、应用与挑战摘要1引言2电子商务LLM的原则3偏差挑战4电子商务应用5未来方......
  • asio的buffer
    ASIO的buffer理解asio的buffer结构任何网络库都有提供buffer的数据结构,这个就是收发数据的缓冲区。asio提供了mutable_buffer和const_buffer这两个结构,他们都是一段连续的空间,首字节存储了后续数据的长度。mutable_buffer用于写服务,const_buffer用于读服务。但是这两个结构都......