转载:https://www.cnblogs.com/frank-yxs/p/5925603.html
在同一个进程中,实现文件共享的方法有两种:
  • 多次使用open函数打开相同文件
  • 使用dup/dup2函数或者fcntl函数
========================================================
对于第一种方法:
    每次使用open函数打开文件时,操作系统内核中都会创建一个不同的文件表项(struct file结构体),但是这些不同的struct file结构体最终都会指向同一个struct inode结构体,因为一个文件只能对应唯一的一个struct inode结构体。
    由于每次open都会创建不同的struct file结构体,也就是说不同的文件描述符对应着不同的文件表项(struct file结构体)。所以在操作不同的文件描述符时,都有各自独立的当前文件偏移量,互不影响。
    举个例子,进程中使用open两次打开了同一文件,得到了文件描述符 fd1 和文件描述符 fd2 接着向 fd1 中写入了一部分数据,fd1 的当前文件偏移量被更新。然后再向 fd2 中写入数据时,由于此时 fd2 的当前文件偏移量仍处在文件开头,所以写入的数据会覆盖了先前向 fd1 中写入的数据。
对于第二种方法:
    在介绍dup/dup2函数或者fcntl函数的笔记中再详解介绍。这种方法和第一种方法是有本质区别的。
=======================================================
在多个进程中,实现文件共享:
    在不同的进程打开相同的文件和在同一进程使用open多次打开同一文件类似,操作系统都会建立不同的文件表项(struct file结构体),而最终指向同一个struct inode结构体。所以每个进程中的当前文件偏移量也是独立的,互不影响。但是和单进程中不同的是,多进程中由于各个进程之间是并发执行的,所以操作的顺序是不确定的,而单进程中操作的顺序是确定的。

Linux文件共享(单进程之间、多进程之间)的更多相关文章

  1. Linux下常见音频格式之间的转换方法

    Linux下常见音频格式之间的转换方法[转] 下面简单介绍下Linux环境常见音频格式之间的转换方法: MP3 相关工具: lameOGG 相关工具: vorbis-toolsAPE 相关工具: ma ...

  2. 单进程与 多进程关系及区别(多进程系统linux)

    单进程编程:顺序执行 数据同步 复杂度低 用途单一 多进程编程:同时执行 数据异步 复杂度高 用途广泛 1. 多进程的优势在于任务的独立性,比如某个任务单独作为一个进程的话,崩溃只影响自己的服务,其他 ...

  3. Linux发行版--发行版之间的关系--哲学思想--目录的命名规则及用途

    作业2 点此链接查看centos7安装 点此链接查看Ubuntu安装 点此链接查看作业3.5 点此链接查看作业7.8.9 作业1.4.6 Linux发行版--发行版之间的关系 1.Linux是什么 L ...

  4. linux文件共享服务

    linux文件共享配置 Windows访问linux 以下操作都在关闭防火墙和关闭selinux的环境下. 关闭防火墙的命令:service iptables stop关闭SELINUX命令:sete ...

  5. Linux文件共享服务之Vsftp

    目录 FTP Vsftp服务的搭建 ftp.sftp.vsftp.vsftpd的区别 FTP FTP的工作原理: FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道.控制通道是和FTP服务器进 ...

  6. Linux文件共享服务之NFS

    NFS(Network File System) 网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...

  7. Linux文件共享服务之Samba

    目录 Samba Samba的配置 Samba Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ...

  8. Windows与Linux文件共享

    Windows与Linux文件共享 Samba服务器 安装Samba服务器 rpm –ivh /mnt/Packages/Samba-3.5.10-125.el6.i686.rpm 添加用户并修改密码 ...

  9. 多进程之间的互斥信号量实现(Linux和windows跨平台)

    多线程之间实现互斥操作方式很多种,临界区(Critical Section),互斥量(Mutex),信号量(Semaphore),事件(Event)等方式 其中临界区,互斥量,信号量算是严格意义的实现 ...

随机推荐

  1. 数据库使用SSIS进行数据清洗教程

    OLTP系统的后端关系数据库用于存储不同种类的数据,理论上来讲,数据库中每一列的值都有其所代表的特定含义,数据也应该在存入数据库之前进行规范化处理,比如说“age”列,用于存储人的年龄,设置的数据类型 ...

  2. android开发:Android 中自定义属性(attr.xml,TypedArray)的使用

    今天我们的教程是根据前面一节扩展进行的,如果你没有看,请点击 Android高手进阶教程(三)查看第三课,这样跟容易方便你的理解! 在xml 文件里定义控件的属性,我们已经习惯了android:att ...

  3. 算法笔记--树的直径 && 树形dp && 虚树 && 树分治 && 树上差分 && 树链剖分

    树的直径: 利用了树的直径的一个性质:距某个点最远的叶子节点一定是树的某一条直径的端点. 先从任意一顶点a出发,bfs找到离它最远的一个叶子顶点b,然后再从b出发bfs找到离b最远的顶点c,那么b和c ...

  4. Servlet / Tomcat / Spring 之间的关系

    0.基础知识 在idea中打开servlet的源码: 可以看见servlet就是一个接口:接口就是规定了一些规范,使得一些具有某些共性的类都能实现这个接口,从而都遵循某些规范. 有的人往往以为就是se ...

  5. ArcGIS API for Silverlight 的重要内容******重要

    ArcGIS Silverlight API:是构建在微软Silverlight平台之上,通过ArcGIS Server Rest API消费ArcGIS Server 服务,同时支持直接消费Bing ...

  6. 12月10日 render( locals:{...}) 传入本地变量。

    Jdstor第一部分后台设计,4-4上传图片. 3.4 Using Partials--3.4.4 Passing Local Variables You can also pass local va ...

  7. Confluence 6 设置公共访问备注

    你不能为匿名用户赋予空间管理员或者限制权限. 你可以让用户自行注册你的 Confluence 站点,同时也可以选择其他的用户注册选项,比如邀请用户注册等.请查看:Add and Invite User ...

  8. hdu多校2C

    题意:找多条路径覆盖所有的边,求最小路径数,要求输出路径 题解:新建一个点n+1,所有奇点向它连边,然后跑欧拉回路,最后把新加的边删去,一段连续的边就是一条路径 = =但是由于太久没写欧拉回路以及之前 ...

  9. DATEADD 和 CAST 函数

    where cast(soh.orderdate as date)=cast(dateadd(day,-1,getdate()) as date) 这一代码在sql 2005 不适用,使用conver ...

  10. 折叠菜单slideUp

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...