我认为描述符只是全局文件表中的数字索引,所以我对“关闭描述符”实际意味着什么感到困惑。有人可以澄清进程,描述符和打开文件之间的关系,并解释打开,复制和关闭描述符的含义吗?
答案 0 :(得分:0)
描述符是一种键。当您想要访问某个房间时,您需要获取它的密钥。 open
通过为您提供密钥来授予您访问房间(文件)的权限。
要访问(read
/ write
)您需要密钥的房间(文件)。
然后公平(系统中的密钥数量有限),当你不再需要访问房间时,你应该释放密钥(close
描述符)。因此,密钥现在可供全球其他客户使用......
对于进程(客户端)想要访问的所有资源,这是相同的。获取密钥,使用密钥,释放资源的密钥。您可以拥有许多不同的密钥集:文件密钥,内存密钥等。
系统是密钥的所有者并管理它们,处理询问系统的密钥并使用它们。
复制只是提供密钥共享的一种方式。两个进程可以使用相同的密钥进入房间。如果您想了解共享这样一个密钥的确切含义,您需要了解一个打开的文件究竟是什么。
事实上,系统给你带来的不仅仅是现实生活中的简单钥匙。描述符是系统表中的一个条目,用于描述正在操作的文件的状态。当您打开文件时,会分配一些数据。
现在,在许多情况下,只有一个与系统条目关联的进程条目。但情况并非总是如此!想想在同一个终端上写两个不同的进程,然后在每个进程中你有一个描述符来表示它对终端的访问(在Unix中一个终端只是一个文件),但是这两个条目都指向同一个系统表条目,包含说明它是哪个终端等的数据
dup
许可描述符确实完全符合这种情况:在同一进程中有2个条目指向同一个系统条目。 dup
许可描述符的另一种方法是fork
进程,克隆进程,克隆克隆进程描述符表...这是两个进程共享同一终端的方式。第一个进程(可能是shell)打开终端,然后fork
执行子命令,以便子命令可以访问同一个终端。