在Posix中,如何使用类型dev_t?

我所追求的是这种类型的含义以及可以使用它的界面。

在Posix规范中解释了dev_t用于设备ID。 但是,对于路径描述的任何对象,设备ID是什么意思,可以是文件,直接,fifo或物理设备?

例如,调用stat()会给你一个包含这种类型成员的结构; 并且您可以在文件系统中统计任何类型的对象。 对于不同的文件类型,设备ID应具有不同的含义。

绝大多数程序(可移植且未连接到单个OS)的dev_t的唯一用途是确定两个文件名或文件描述符引用相同的底层文件。 当且仅当两个文件的stat结构的st_inost_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。