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結構體。因此每一個進程中的當前文件偏移量也是獨立的,互不影響。可是和單進程中不一樣的是,多進程中因爲各個進程之間是併發執行的,因此操做的順序是不肯定的,而單進程中操做的順序是肯定的。
相關文章
相關標籤/搜索