import Darwin import Foundation import IOKit enum Sysctl { static func int(_ name: String) -> Int? { var value: Int64 = 0 var size = MemoryLayout.size guard sysctlbyname(name, &value, &size, nil, 0) == 0 else { return nil } // 32 位值只写入低 4 字节 return size == MemoryLayout.size ? Int(Int32(truncatingIfNeeded: value)) : Int(value) } static func string(_ name: String) -> String? { var size = 0 guard sysctlbyname(name, nil, &size, nil, 0) == 0, size > 0 else { return nil } var buffer = [CChar](repeating: 0, count: size) guard sysctlbyname(name, &buffer, &size, nil, 0) == 0 else { return nil } return String(nullTerminated: buffer) } } enum IORegistry { static func property(_ service: io_registry_entry_t, _ key: String) -> Any? { IORegistryEntryCreateCFProperty(service, key as CFString, kCFAllocatorDefault, 0)?.takeRetainedValue() } static func string(fromData value: Any?) -> String? { guard let data = value as? Data else { return value as? String } return String(decoding: data.prefix { $0 != 0 }, as: UTF8.self) } } extension String { init(nullTerminated buffer: [CChar]) { self = String(decoding: buffer.prefix { $0 != 0 }.map { UInt8(bitPattern: $0) }, as: UTF8.self) } }