sysctl
的 Swift 封装。
基本函数在 Sysctl 命名空间中定义。
您可以像访问 oid 名称一样,以名称链的方式访问特定值,如下所示
// "kern.osversion"
let osVersion = Sysctl.sysctl(kern.osversion)
// "machdep.cpu.vendor"
let cpuVendorName = Sysctl.sysctl(machdep.cpu.vendor)
每个字段还保存与其 OID 关联的值的类型信息。因此,在上面的示例中,该值会自动作为 String 获取。
(参见 Node 目录)
注意
某些值在没有 root 权限的情况下无法读取。
注意
存在的 OID 因 CPU 架构而异。某些 OID 可能仅在 macOS 上存在。
以下是对实现的简要描述。
在 OID 目录 中,定义了每个节点的 OID 的名称、id 和值类型信息。
提供给 sysctl 的 OID 被构建为树状结构。树中的每个节点都在 Node 目录 中定义。
如果节点有子节点,则子节点的聚合类型将保留为 Node<Child> 类型。
public let ipc = Node<Ipc>(
oid: OID.Kern.ipc
)
如果是终端节点,则它具有与 OID 关联的值的类型信息。
public let ostype = LeafNode<String>(
oid: OID.Kern.ostype
)
Field 是从根节点到终端节点所追踪的路径。(根节点在 TopNodes.swift 中定义。)
从根节点到终端节点,可以通过点连接的方式访问节点。
let field: Field<String> = kern.ostype
let field2: Field<CInt> = kern.argmax
可以通过将此 Field
提供给 Sysctl.sysctl
函数来检索值。
let ostype: String = Sysctl.sysctl(field)
let argmax: CInt = Sysctl.sysctl(field)
swift-sysctl 在 MIT 许可证下发布。请参阅 LICENSE