首页 > 代码库 > 文件IO详解(十)---文件共享(多进程之间、单进程之间)

文件IO详解(十)---文件共享(多进程之间、单进程之间)

在同一个进程中,实现文件共享的方法有两种:
  • 多次使用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结构体。所以每个进程中的当前文件偏移量也是独立的,互不影响。但是和单进程中不同的是,多进程中由于各个进程之间是并发执行的,所以操作的顺序是不确定的,而单进程中操作的顺序是确定的。
 

文件IO详解(十)---文件共享(多进程之间、单进程之间)