转载: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结构体。所以每个进程中的当前文件偏移量也是独立的,互不影响。但是和单进程中不同的是,多进程中由于各个进程之间是并发执行的,所以操作的顺序是不确定的,而单进程中操作的顺序是确定的。

最新文章

  1. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 用”模型定义”函数过滤实体集
  2. Python之路,day9-Python基础
  3. win10添加打印机--无法访问指定设备,路径或文件。。
  4. safeNet
  5. 在keil 4中添加stc系列芯片的方法--【sky原创】
  6. VS2010静态编译生成.exe可执行文件
  7. Maven的几个核心概念
  8. iOS copy&mutableCopy理解
  9. 模拟cpu调度
  10. Linux之select系统调用_1
  11. 浅谈Java对象回收的三种方式
  12. [设计模式]<<设计模式之禅>>关于接口隔离原则
  13. [大牛翻译系列]Hadoop系列性能部分完结
  14. linux c setitimer使用方法说明
  15. nyoj 破门锁(水题)
  16. GUI(自定义背景图片)
  17. Python内置函数(32)——input
  18. python Flask web框架
  19. Dynamics 365-部分用户访问环境缓慢
  20. linux用户

热门文章

  1. codeforces 352 div 2 C.Recycling Bottles 贪心
  2. OpenGL入门程序三:点、线、面的绘制
  3. protected 与 internal
  4. 3.5 MIPS体系结构
  5. ubuntu下php无法载入mysql扩展
  6. mysql--------大数据量分页sql语句优化
  7. Confluence 6 目录序列将会影响
  8. python-day46--前端基础之html
  9. C++中基类虚析构函数的作用及其原理分析
  10. IOS8-人机界面指南