Swift sysctl get integer
我正在尝试制作一个可以读取系统信息(在MacOS上)的应用程序,并且我能够读取sysctl字符串,如下所示:Swift sysctl get integer,swift,macos,sysctl,Swift,Macos,Sysctl,我正在尝试制作一个可以读取系统信息(在MacOS上)的应用程序,并且我能够读取sysctl字符串,如下所示: func cpu() -> String { var size = 0 sysctlbyname("machdep.cpu.brand_string", nil, &size, nil, 0) var machine = [CChar](repeating: 0, count: Int(size)) sysctlbyname("machd
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.cpuffrequency这样的整数时:
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.cpufFrequency”返回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
}
func cpuFreq()抛出->Int64{
变量频率:Int64=0
变量大小=MemoryLayout.size
如果sysctlbyname(“hw.cpuffrequency”、&frequency和size,nil,0)!=0{
抛出POSIXError.Code(rawValue:errno).map{POSIXError($0)}??CocoaError(.fileReadUnknown)
}
返回频率
}