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結構體。所以每個進程中的當前文件偏移量也是獨立的,互不影響。但是和單進程中不同的是,多進程中由於各個進程之間是並發執行的,所以操作的順序是不確定的,而單進程中操作的順序是確定的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM