据我所知,Linux中的设备文件只是用户界面,用户可以与实际设备进行通信。是否还有其他设备文件的使用?
这是否意味着如果用户不需要与真实设备通信,我们不需要设备文件?
此外,他们倾向于将每个真实设备建模为字符或块或网络设备。这是真的吗?
答案 0 :(得分:3)
首先,这是一切的开始。根据{{3}},世界是在1970年1月1日星期四上午12点(UTC)创建的,因此在此之前的任何时间都没有(标准)计算方法,因为它根本就不存在;)。
然后,它是70年代(实际上,已故的60年代,但谁在乎呢?),你还记得吗(我不......)?我们当时并不知道the Legend of the Epoch吸烟的是什么,但它似乎是在绝密的贝尔实验室使用的某种异国情调的墨水。他所拥有的文件应该无法访问。他只是在创作之前的一小部分时间,他说......
让一切都成为文件!
就是这样。在Unix及其无数的后代(几乎) 一文件中,地狱(也称为/dev/null
)是一个文件。< / p>
在Epoch诞生了核心。它是最终的君主,其唯一目的是允许或拒绝访问神圣数据。啊!杀死所有驱逐他的人(如果你做*(int*)0 = 0
),由于违反了地址空间法,你将获得死刑:Shall not you read, write, or otherwise access any address outside your address space
)。
现在,因为所有都是文件,设备是文件,不是吗?它没有坏处(除了向大家展示块设备是羞耻的事实是一个愚蠢的想法)。而且,由于网络资源是某种东西,它们是文件,不是吗?
现在,至尊君主如何处理这个问题?首先,对于普通文件,一切都按预期工作。文件系统驱动程序从大容量存储设备驱动程序获取块,然后读取超级块,等等,等等......
但是,所有其他人会发生什么?我通常将它们视为&#34;陷阱&#34;文件。每当您读取或写入它们时,内核都会检测到这种特殊情况,并调用适当的回退函数来模拟&#34;模拟&#34;从常规文件读取和写入的效果。例如,对于/dev/null
(地狱),所有读取都将返回End-of-File,并且所有写入都将被丢弃。在引用设备的文件的情况下,调用不直接到设备,而是到设备驱动程序,即负责处理特定硬件的内核的一部分。因此,没有&#34;文件到设备&#34;,但是&#34;文件到设备驱动程序,带有一些额外的信息来区分各个设备&#34;。
这允许特殊文件,例如/dev/random
,/dev/zero
,等 ...通过相同的界面存在。虽然他们没有&#34;文件到设备/设备驱动程序&#34;,但用户(几乎)无法区分它们,所以谁在乎呢?
如果他能听到那话,那么这也意味着如果用户不需要与&gt;进行通信。真实的设备,我们不需要设备文件吗?
Ken会转入他的坟墓......这些抽象允许在设备驱动程序和实用程序(例如用于格式化USB驱动器的程序)之类的内容中实现用户空间(尽管具有root权限,无论如何)。从内核的角度来看,没有&#34;用户&#34;正如您所想,但是某些群组中的流程(称为&#34;用户&#34;)由其&#34;用户ID&#34;标识。
此外,他们倾向于将每个真实设备建模为字符或块或网络设备。这是真的吗?
虽然在实践中它是正确的,但设备驱动程序没有义务通过特殊文件导出其相应的设备。
我希望这能为你带来一些启示!
答案 1 :(得分:0)
除了实际设备外,还存在/dev/random
和/dev/null
以及/dev/stdin
等特殊文件,与硬件设备不对应。
声明
他们倾向于将每个真实设备建模为字符或块或网络设备
是正确的,因为他们倾向于这样做,但请注意有例外(“大多数设备是块或字符设备;但是存在其他类型的设备并且可以创建”):http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/dev.html