swift-sysctl

sysctl 的 Swift 封装。

Github issues Github forks Github stars Github top language

用法

基本函数在 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 目录 中,定义了每个节点的 OID 的名称、id 和值类型信息。

Node

提供给 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

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