![](/img/trans.png)
[英]What happens when two processes write to same portion of a mmaped file?
[英]What happens when a lot of processes open the same special file?
例如,我有兩個嘗試打開特殊文件( /dev/example
)的進程A和B. 驅動程序有一個open方法,用於初始化結構( struct c
)並將其傳遞給filp->private_data
。 如果之后進程B打開相同的特殊文件,會發生什么如果我理解正確,我們將有兩個struct文件實例(兩個指向同一結構文件的filp指針)。 open方法是否會再次初始化struct C
並將其傳遞給filp->private_data
並且一個進程初始化后會發生什么?
如果之后進程B打開相同的特殊文件,會發生什么如果我理解正確,我們將有兩個struct文件實例(兩個指向同一結構文件的filp指針)。
這是錯的。 每個open(2)
都與一個struct file
匹配。 引自LDD3 /第3章 :
文件結構表示打開的文件。 (它不是特定於設備驅動程序;系統中的每個打開文件在內核空間中都有一個關聯的結構文件。)它由內核在打開時創建,並傳遞給對文件進行操作的任何函數,直到最后一次關閉。 關閉文件的所有實例后,內核將釋放數據結構。
對於共享同一struct file
兩個進程,則必須具有父子關系,因為創建文件描述符副本的唯一方法(指向同一struct file
兩個struct file
)是fork(2)
或dup(2)
系統調用。
在您的情況下,由於每個open(2)
初始化一個struct C
,並且進程A和B都調用open(2)
,它們不會通過private_data
字段共享相同的struct C
,因為它們與不同的struct file
相關聯。
他們分享並可能讓你困惑的是struct inode
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.