簡體   English   中英

當很多進程打開同一個特殊文件時會發生什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM