关于Linux中的设备文件

关于Linux中的设备文件,linux,file,linux-kernel,linux-device-driver,Linux,File,Linux Kernel,Linux Device Driver,据我所知,Linux中的设备文件只是用户与实际设备通信的用户界面。设备文件还有其他用途吗 这是否意味着如果用户不需要与真实设备通信,我们就不需要设备文件 此外,他们倾向于将每个真实设备建模为字符、块或网络设备。这是真的吗?除了实际的设备外,还有一些特殊的文件,如/dev/random和/dev/null和/dev/stdin与硬件设备不对应 声明 他们倾向于将每个真实设备建模为字符、块或网络设备 这一点是正确的,因为他们倾向于这样做,但请注意,也有例外(“大多数设备是块设备或字符设备;但是存在其

据我所知,Linux中的设备文件只是用户与实际设备通信的用户界面。设备文件还有其他用途吗

这是否意味着如果用户不需要与真实设备通信,我们就不需要设备文件


此外,他们倾向于将每个真实设备建模为字符、块或网络设备。这是真的吗?

除了实际的设备外,还有一些特殊的文件,如
/dev/random
/dev/null
/dev/stdin
与硬件设备不对应

声明

他们倾向于将每个真实设备建模为字符、块或网络设备


这一点是正确的,因为他们倾向于这样做,但请注意,也有例外(“大多数设备是块设备或字符设备;但是存在其他类型的设备,并且可以创建”):。

让我们从一些历史事实开始:

首先,这是一切的开始。世界是在1970年1月1日星期四UTC凌晨12:00创建的,因此在此之前没有(标准)方法计算时间,因为它根本不存在;)

然后,是70年代(实际上是60年代末,但谁在乎呢?),你还记得吗(我不…?)?我们不知道当时吸烟的是什么,但这似乎是某种异国情调的墨水,被用于贝尔实验室的绝密文件中,而他本不应该接触到这些文件。他说,这只是创造之前的一小部分时间

让一切都成为一个文件

事实就是这样。在Unix及其不可计数的Decentant上,(几乎)所有都是一个文件,甚至地狱(也称为
/dev/null
)都是一个文件

这个时代诞生了内核。它是终极君主,其唯一目的是允许或拒绝访问神圣数据。啊!!并且为了杀死所有解散他的人(如果你这么做了,你将因违反地址空间法而被处以死刑:
你不得读、写或以其他方式访问地址空间以外的任何地址

现在,因为一切都是文件,设备就是文件,不是吗?这没有什么不好的(除了让每个人都知道阻塞设备是他们的耻辱这一事实是一个愚蠢的想法)。而且,因为网络资源很重要,所以它们是文件,不是吗

现在,最高君主是如何处理这件事的?首先,对于普通文件,一切正常。文件系统驱动程序从海量存储设备驱动程序中获取块,然后读取超级块,诸如此类

但是,其他人会怎么办?我通常认为它们是“陷阱”文件。无论何时读写它们,内核都会检测到这种特殊情况,并调用适当的回退函数来“模拟”从常规文件读写的效果。例如,对于
/dev/null
(hell),所有读取都将返回文件末尾,所有写入都将被丢弃。在文件引用设备的情况下,调用不会直接转到设备,而是转到设备驱动程序,即负责处理特定硬件部件的内核的一部分。因此,没有“文件到设备”,而是“文件到设备驱动程序,其中包含一些额外的信息以区分各个设备”

这允许使用特殊文件,例如
/dev/random
/dev/zero
,等等。。。通过同一接口存在。虽然它们不是“设备文件/设备驱动程序”,但用户(几乎)无法区分它们,所以谁在乎呢

这是否意味着,如果用户不需要与>真实设备通信,我们就不需要设备文件

如果他听到这个,他会在坟墓里死去。。。这些抽象允许在用户空间中实现诸如设备驱动程序和实用程序(例如用于格式化USB驱动器的程序)之类的东西(尽管具有根权限)。从内核的角度来看,这里没有您认为的“用户”,而是属于某个组的进程,称为“用户”,由其“用户ID”标识

此外,他们倾向于将每个真实设备建模为字符、块或网络设备。这是真的吗

虽然在实践中确实如此,但设备驱动程序并没有义务通过特殊文件导出其相应的设备


我希望这能给你带来一些启示

嘿,谢谢。此外,除了让用户通过设备驱动程序与实际设备进行通信外,是否还使用了设备文件?精彩的解释!:我只有一个问题,我在哪里可以读到“.在用户空间中实现的设备驱动程序和实用程序…”?再次感谢。@sahil_时代:这实际上有两种含义。首先,有一个问题。举个更规则的例子,想想。它格式化驱动器,并在其中创建可引导操作系统安装程序,但它在用户空间中运行(当然是以root用户身份运行)!而且,如果你想走异国情调的道路,请阅读和。