根据这所以问题是,当我们打开一个文件来读取它时,我们只在打开它时检查一次权限。如果我们更改文件的权限并表示不再允许用户读取该文件,则用户仍然可以读取该文件。这提出了几个问题:
难道我们不需要继续检查权限吗,因为如果我们打开一个文件来读取它,然后尝试使用
write
,我们不应该得到一个错误吗?这意味着我们要检查我们可以对文件执行哪些操作。 (也许我们用 fd 在本地保存允许我们对其执行的操作并每次检查它们?)当我们更新权限时,是更新inode表中inode的单个副本还是直接更新磁盘上的副本?因为如果我们直接在磁盘上的副本上更新权限,则查看 inode 表的其他进程将看不到更新的版本,因此更新 inode 表并从那里让操作系统将更改写回更有意义磁盘。
答案1
难道我们不需要继续检查权限吗,因为如果我们打开一个文件来读取它,然后尝试使用写入,我们不应该得到一个错误吗?
不,我们不应该!这是有意的。open
访问文件时的权限很重要,而不是稍后。这就是 API。
当我们更新权限时,是更新inode表中inode的单个副本还是直接更新磁盘上的副本?
这完全是文件系统层的实现细节。我们不知道——而且,我们也不必关心。我们所知道的是,这应该在多个流程中保持一致,并且在哪里进行更改并不重要。