gpt4 book ai didi

Swift sysctl 获取整数

转载 作者:搜寻专家 更新时间:2023-10-31 22:26:47 25 4
gpt4 key购买 nike

我正在尝试制作一个读取系统信息(在 MacOS 上)的应用程序,并且我已经能够像这样读取 sysctl STRINGS:

 func cpu() -> String {
var size = 0
sysctlbyname("machdep.cpu.brand_string", nil, &size, nil, 0)
var machine = [CChar](repeating: 0, count: Int(size))
sysctlbyname("machdep.cpu.brand_string", &machine, &size, nil, 0)
return String(cString: machine)

}

但是当我尝试像这样读取 hw.cpufrequency 这样的整数时:

func cpuFreq() -> String {
var size = 0
sysctlbyname("hw.cpufrequency", nil, &size, nil, 0)
var machine = [CChar](repeating: 0, count: Int(size))
sysctlbyname("hw.cpufrequency", &machine, &size, nil, 0)
return String(cString: machine)

}

它什么也没有返回,有什么线索吗?

最佳答案

您的代码假定返回值将是一个字符串,但事实并非如此;它实际上是一个整数。如果您查看 sysctl(3) 的手册页 [在终端中键入“man 3 sysctl”以查看它],您会看到“hw.cpufrequency”在 C 中返回一个 int64_t,在 Swift 中转换为一个 Int64 .所以你想把这个值读入一个 Int64,而不是一个字符串。你可以这样做:

func cpuFreq() throws -> Int64 {
var frequency: Int64 = 0
var size = MemoryLayout<Int64>.size

if sysctlbyname("hw.cpufrequency", &frequency, &size, nil, 0) != 0 {
throw POSIXError.Code(rawValue: errno).map { POSIXError($0) } ?? CocoaError(.fileReadUnknown)
}

return frequency
}

关于Swift sysctl 获取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45625076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com