Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift sysctl get integer_Swift_Macos_Sysctl - Fatal编程技术网

Swift sysctl get integer

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

我正在尝试制作一个可以读取系统信息(在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("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)
}
返回频率
}