在Posix中,如何使用类型dev_t?
我所追求的是这种类型的含义以及可以使用它的界面。
在Posix规范中解释了dev_t
用于设备ID。 但是,对于路径描述的任何对象,设备ID是什么意思,可以是文件,直接,fifo或物理设备?
例如,调用stat()
会给你一个包含这种类型成员的结构; 并且您可以在文件系统中统计任何类型的对象。 对于不同的文件类型,设备ID应具有不同的含义。
绝大多数程序(可移植且未连接到单个OS)的dev_t
的唯一用途是确定两个文件名或文件描述符引用相同的底层文件。 当且仅当两个文件的stat
结构的st_ino
和st_dev
条目彼此匹配时才会出现这种情况。
基本上, st_dev
告诉文件驻留在哪个“设备”(例如,挂载的分区,网络共享等),并且st_ino
是单个设备的上下文中文件的唯一标识符。
实际上, struct stat
有两个dev_t
-typed字段:
-
st_dev
是“包含文件的设备的[d]设备ID”,因此如果两个文件具有相同的st_dev
,则它们位于同一文件系统上。 -
st_rdev
是由字符或块特殊文件表示的设备的设备ID,即/dev
常见的文件。 它对其他类型的文件没有意义。
在内核中,定义的dev_t类型用于保存设备号(主要/次要)。 dev_t是一个32位数量,主要数字为12位,次要数字为20。