4.23特殊设备文件s t _ d e v和s t _ r d e v这两个字段经常引起混淆,当在11.9节讨论t t y n a m e函数时,需要使用这两个字段。有关规则很简单:

  • 每个文件系统都由其主、次设备号而为人所知。设备号所用的数据类型是基本系统数据类型d e v _ t。回忆图4-1,一个磁盘经常包含若干个文件系统。

  • 我们通常可以使用两个大多数实现都定义的宏:m a j o r和m i n o r来存取主、次设备号。这就意味着我们无需关心这两个数是如何存放在d e v _ t对象中的。早期的系统用16位整型存放设备号:8位用于主设备号,8位用于次设备号。S V R 4使用32位:14位用于主设备号,18位用于次设备号。4.3 + B S D则使用16位:8位用于主设备号,8位用于次设备号。P O S I X . 1说明d e v _ t类型是存在的,但没有定义它包含什么,或如何取得其内容。大多数实现定义了宏m a j o r和m i n o r,但在哪一个头文件中定义它们则与实现有关。

  • 系统中每个文件名的s t _ d e v值是文件系统的设备号,该文件系统包含了该文件名和其对应的i节点。

  • 只有字符特殊文件和块特殊文件才有s t _ r d e v值。此值包含该实际设备的设备号。

实例程序4-10为每个命令行参数打印设备号,另外,若此参数引用的是字符特殊文件或块特殊文件,则也打印该特殊文件的s t _ r d e v值。程序4-10打印s t _ d e v和s t _ r d e v值。

相关链接:

  1. Linux块设备文件系统构架

  2. Linux设备驱动开发详解第5章Linux文件系统与设备文件

  3. linux设备管理之devfs文件系统

  4. Oracle Solaris 11.1管理:设备与文件系统

特殊设备文件-鸿鹄论坛_华为认证h35-211-hcnp-access network题库

  1. Linux内核设备驱动之虚拟文件系统笔记整理