Linux文件共享(单进程之间、多进程之间)

转载: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结构体。因此每一个进程中的当前文件偏移量也是独立的,互不影响。可是和单进程中不一样的是,多进程中因为各个进程之间是并发执行的,因此操做的顺序是不肯定的,而单进程中操做的顺序是肯定的。
相关文章
相关标签/搜索