我所追求的是这种类型的含义和什么接口可以使用它。在Posix规范中解释了dev_t用于设备ID。但是,对于路径所描述的任何对象(可以是文件、directy、fifo或物理设备),device id意味着什么呢?例如,调用stat()将给予一个包含此类成员的结构;你可以在你的文件系统中统计任何类型的对象。设备ID对于不同的文件类型应该有不同的含义。
dev_t
stat()
eimct9ow1#
dev_t在绝大多数程序中的唯一用途是确定两个文件名或文件描述符是否引用同一个底层文件。当且仅当两个文件的stat结构的st_ino和st_dev条目彼此匹配时,这才成立。基本上,st_dev告诉哪个“设备”(例如安装的分区、网络共享等),并且st_ino是单个设备的上下文中的文件的唯一标识符。
stat
st_ino
st_dev
tvmytwxo2#
实际上,在struct stat中有两个dev_t类型的字段:
struct stat
st_rdev
/dev
72qzrwbm3#
在内核中,中定义的dev_t类型用于保存设备编号(major/minor)。dev_t是一个32位的量,其中12位用于主号码,20位用于次号码。
e1xvtsh34#
不是问题的答案,只是更新一些关于st_dev的信息
当前glibc(2.35)中的dev_t是64位,主要和次要编号为32位。glibc的默认编码是MMMM Mmmm mmmM MMmm,其中M是major number的十六进制数字,m是minor number的十六进制数字。这与dev_t为16位宽、编码为MMmm的遗留系统向后兼容。它还与Linux内核向后兼容,对于某些体系结构,Linux内核使用32位dev_t,编码为mmmM MMmm。可以使用major(3)和minor(3)来分解dev_t:
MMMM Mmmm mmmM MMmm
M
major number
m
minor number
major(3)
minor(3)
$ cat main.c #include <assert.h> #include <sys/stat.h> #include <sys/sysmacros.h> #include <stdio.h> int main(void) { struct stat buf; assert(0 == stat(".", &buf)); printf("Major device ID: %d\n", major(buf.st_dev)); printf("Minor device ID: %d\n", minor(buf.st_dev)); } $ gccs main.c && ./a.out Major device ID: 0 Minor device ID: 39
flseospp5#
st_ino和st_dev字段一起唯一标识系统中的文件。
设备ID由两部分组成:标识设备的类别的主ID,以及标识该类别中的设备的特定示例的次ID。设备ID使用类型dev_t表示。
5条答案
按热度按时间eimct9ow1#
dev_t
在绝大多数程序中的唯一用途是确定两个文件名或文件描述符是否引用同一个底层文件。当且仅当两个文件的stat
结构的st_ino
和st_dev
条目彼此匹配时,这才成立。基本上,
st_dev
告诉哪个“设备”(例如安装的分区、网络共享等),并且st_ino
是单个设备的上下文中的文件的唯一标识符。tvmytwxo2#
实际上,在
struct stat
中有两个dev_t
类型的字段:st_dev
是“包含文件的设备的[d]设备ID”,因此如果两个文件具有相同的st_dev
,则它们位于同一个文件系统上。st_rdev
是由字符或块特殊文件表示的设备的设备ID,即/dev
中常见的文件。它对其他类型的文件没有任何意义。72qzrwbm3#
在内核中,中定义的dev_t类型用于保存设备编号(major/minor)。dev_t是一个32位的量,其中12位用于主号码,20位用于次号码。
e1xvtsh34#
不是问题的答案,只是更新一些关于
st_dev
的信息当前glibc(2.35)中的
dev_t
是64位,主要和次要编号为32位。glibc的默认编码是MMMM Mmmm mmmM MMmm
,其中M
是major number
的十六进制数字,m
是minor number
的十六进制数字。这与dev_t为16位宽、编码为MMmm的遗留系统向后兼容。它还与Linux内核向后兼容,对于某些体系结构,Linux内核使用32位dev_t,编码为mmmM MMmm。可以使用
major(3)
和minor(3)
来分解dev_t
:flseospp5#
st_ino和st_dev字段一起唯一标识系统中的文件。
设备ID由两部分组成:标识设备的类别的主ID,以及标识该类别中的设备的特定示例的次ID。设备ID使用类型dev_t表示。