我为此做了一些网络搜索,但只能找到有关获取与设备节点关联的内核模块的结果。无论如何我可以获得当前系统根设备的主要和次要数量,如果适用,根设备的父设备(例如,https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIhhjGu76G...P0Gzu7B5aAnoYUd
{
"data": {
"title": "notification_title",
"body": "notification_body"
},
"to" : "jh578_gsh....jhHGFJ76FH"
}
是/dev/sda
的“父”)?内核是否导出了一些用于获取此功能的函数,还是我需要间接获取它?
答案 0 :(得分:0)
没有与设备节点关联的模块。可能你知道根目录是进程本地的东西(进程结构存储根目录的inode引用---这可以通过特权chroot(2)
系统调用来更改)和当前工作目录(解决不以/
开始的路径
如果您想知道负责根目录的设备,您有两个选择:
您的流程尚未成为chroot(2)
系统调用,因此您opendir("/")
然后对其执行fstat(2)
(或者您可以执行stat(2)
系统调用在"/"
目录上)。这将为根目录所在的设备提供st_dev
返回的struct stat
字段。它被格式化为dev_t
个数字,其中一些位代表主要数字,一些代表次要数字。您可以使用MKDEV(ma,mi)
中定义的MAJOR(dev)
和MINOR(dev)
以及<linux/kdev_t.h>
宏来访问主要和次要号码。要获取物理磁盘,只需使用0xf0
屏蔽次要编号,您将获得整个磁盘的次要编号。
您的进程已进行chroot(2)
系统调用,因此您无权访问系统中的真实根目录。如果您可以访问/proc
文件系统,那么可能您可以调用mount(1)
命令来获取挂载表。您可以在该表中搜索/
条目,然后获取/dev/sd<disk>
条目。获得设备后,获取父设备很容易。您可以像在最后一点那样屏蔽该数字,以获取物理磁盘的次要编号。
您还可以访问/proc/diskstats
文件,该文件显示每个块设备的统计信息。您将在每行的前三个字段中获取主要,次要和设备名称。
有些磁盘安排不允许分区,如RAID设备或卷管理器磁盘。在这些情况下,访问物理磁盘(或磁盘,因为可能有多个)更加困难。