关于 Linux 中的设备文件
Regarding Device Files in Linux
据我了解,Linux中的设备文件只不过是用户与实际设备进行通信的用户界面。设备文件还有其他用途吗?
这是否意味着如果用户不需要与真实设备通信,我们就不需要设备文件?
他们还倾向于将每个真实设备建模为角色或块或网络设备。这是真的吗?
除实际设备外,还有/dev/random
、/dev/null
、/dev/stdin
等不对应硬件设备的特殊文件
声明
they tend to model every real device as either a character or block or network device
是真的,因为他们倾向于这样做,但请注意也有例外("The majority of devices are either block or character devices; however other types of devices exist and can be created"):http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/dev.html.
让我们从一些历史事实开始:
首先,这是一切的开始。根据 the Legend of the Epoch,世界创建于 1970 年 1 月 1 日星期四 12:00a.m.,UTC,因此没有(标准)方法来计算之前的任何时间,因为它只是不存在 ;).
然后,那是 70 年代(实际上是 60 年代后期,但谁在乎呢?),你还记得吗(我不……)?我们不知道当时 Ken 吸的是什么,但似乎是贝尔实验室绝密文件中使用的某种奇异墨水,他本不应访问这些文件。他说,在 The Creation 之前只是时间的无穷小部分......
Let everything be a file!
原来如此。在 Unix 及其不可数的后代上,(几乎)所有 都是 文件,以至于地狱(也称为 /dev/null
) 是一个文件。
大纪元诞生了内核。它是最终的君主,其唯一目的是允许或拒绝访问神圣数据。啊!并杀死所有违抗他的人(如果你这样做 *(int*)0 = 0
,你将因违反地址 Space 法律:Shall not you read, write, or otherwise access any address outside your address space
而被判处死刑)。
现在,因为一切 都是文件,设备也是文件,不是吗?这没有什么不好的(除了向每个人展示块设备是耻辱的事实是一个愚蠢的想法)。而且,因为网络资源是东西,它们是文件,不是吗?
那么,至尊君主是怎么处理的呢?首先,对于普通文件,一切都按预期进行。文件系统驱动程序从大容量存储设备驱动程序获取块,然后读取超级块,等等,等等...
但是,其他人会怎样呢?我通常将它们视为 "trap" 文件。每当您读取或写入它们时,内核都会检测到这种特殊情况,并调用适当的回退函数来 "simulate" 从常规文件读取和写入的效果。例如,对于 /dev/null
(地狱),所有读取都将 return 文件结束,并且所有写入都将被丢弃。在文件引用设备的情况下,调用不会直接转到设备,而是转到设备驱动程序,即负责处理特定硬件部分的内核部分.因此,没有"files to devices",而是"files to device drivers with some extra information to differentiate respective devices".
这允许特殊文件,例如/dev/random
、/dev/zero
、等...通过相同的界面存在。尽管它们不是 "files to devices/device drivers",但用户(几乎)无法区分它们,所以谁在乎呢?
Also does this mean that if a user does not need to communicate with the > real device, we do not need device files?
Ritchie 如果他听到的话,他会在坟墓里自首......这些抽象允许诸如设备驱动程序和实用程序(例如您用来格式化 USB 驱动器的程序)之类的东西成为在 user-space 中实现(尽管无论如何具有 root 权限)。从内核的角度来看,没有你想象的 "user",而是属于某个组的进程,称为 "user",由其 "user ID".[=22 标识=]
Also they tend to model every real device as either a character or block or network device. Is this true?
虽然在实践中确实如此,但设备驱动程序没有义务通过特殊文件导出其相应的设备。
希望这对您有所启发!
据我了解,Linux中的设备文件只不过是用户与实际设备进行通信的用户界面。设备文件还有其他用途吗?
这是否意味着如果用户不需要与真实设备通信,我们就不需要设备文件?
他们还倾向于将每个真实设备建模为角色或块或网络设备。这是真的吗?
除实际设备外,还有/dev/random
、/dev/null
、/dev/stdin
等不对应硬件设备的特殊文件
声明
they tend to model every real device as either a character or block or network device
是真的,因为他们倾向于这样做,但请注意也有例外("The majority of devices are either block or character devices; however other types of devices exist and can be created"):http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/dev.html.
让我们从一些历史事实开始:
首先,这是一切的开始。根据 the Legend of the Epoch,世界创建于 1970 年 1 月 1 日星期四 12:00a.m.,UTC,因此没有(标准)方法来计算之前的任何时间,因为它只是不存在 ;).
然后,那是 70 年代(实际上是 60 年代后期,但谁在乎呢?),你还记得吗(我不……)?我们不知道当时 Ken 吸的是什么,但似乎是贝尔实验室绝密文件中使用的某种奇异墨水,他本不应访问这些文件。他说,在 The Creation 之前只是时间的无穷小部分......
Let everything be a file!
原来如此。在 Unix 及其不可数的后代上,(几乎)所有 都是 文件,以至于地狱(也称为 /dev/null
) 是一个文件。
大纪元诞生了内核。它是最终的君主,其唯一目的是允许或拒绝访问神圣数据。啊!并杀死所有违抗他的人(如果你这样做 *(int*)0 = 0
,你将因违反地址 Space 法律:Shall not you read, write, or otherwise access any address outside your address space
而被判处死刑)。
现在,因为一切 都是文件,设备也是文件,不是吗?这没有什么不好的(除了向每个人展示块设备是耻辱的事实是一个愚蠢的想法)。而且,因为网络资源是东西,它们是文件,不是吗?
那么,至尊君主是怎么处理的呢?首先,对于普通文件,一切都按预期进行。文件系统驱动程序从大容量存储设备驱动程序获取块,然后读取超级块,等等,等等...
但是,其他人会怎样呢?我通常将它们视为 "trap" 文件。每当您读取或写入它们时,内核都会检测到这种特殊情况,并调用适当的回退函数来 "simulate" 从常规文件读取和写入的效果。例如,对于 /dev/null
(地狱),所有读取都将 return 文件结束,并且所有写入都将被丢弃。在文件引用设备的情况下,调用不会直接转到设备,而是转到设备驱动程序,即负责处理特定硬件部分的内核部分.因此,没有"files to devices",而是"files to device drivers with some extra information to differentiate respective devices".
这允许特殊文件,例如/dev/random
、/dev/zero
、等...通过相同的界面存在。尽管它们不是 "files to devices/device drivers",但用户(几乎)无法区分它们,所以谁在乎呢?
Also does this mean that if a user does not need to communicate with the > real device, we do not need device files?
Ritchie 如果他听到的话,他会在坟墓里自首......这些抽象允许诸如设备驱动程序和实用程序(例如您用来格式化 USB 驱动器的程序)之类的东西成为在 user-space 中实现(尽管无论如何具有 root 权限)。从内核的角度来看,没有你想象的 "user",而是属于某个组的进程,称为 "user",由其 "user ID".[=22 标识=]
Also they tend to model every real device as either a character or block or network device. Is this true?
虽然在实践中确实如此,但设备驱动程序没有义务通过特殊文件导出其相应的设备。
希望这对您有所启发!